Não apague a produção
Aprenda os hábitos que impedem que um comando errado arruíne a sua semana.
- Pré-visualizar comandos destrutivos antes de rodá-los
- Explicar como uma variável vazia ou um espaço perdido vira um desastre
- Revisar scripts com o ShellCheck e avaliar o curl | bash
O shell faz exatamente o que você manda, na hora, sem desfazer. A maioria dos desastres famosos de shell se resume a alguns pequenos erros, e alguns hábitos impedem quase todos.
O desastre de um caractere
Aqui está uma linha de um tipo real de script de limpeza. O que pode dar errado?
rm -rf "$BUILD_DIR"/*Se BUILD_DIR estiver vazia ou não definida, o Bash roda alegremente rm -rf /*. Um erro de digitação no nome de uma variável também faz isso, porque o Bash trata variáveis desconhecidas como vazias. Duas defesas:
${BUILD_DIR:?}para o script com um erro se a variável estiver vazia.set -ufaz qualquer variável não definida ser um erro.
E um espaço perdido é igualmente ruim: rm -rf / tmp/build apaga / e tmp/build.
Experimente
Até 15 XPQuase acidente na câmara de ar
Você está limpando a pasta temporária da estação. Tudo aqui é simulado, então cometa os seus erros agora.
Missão 1 de 4
Veja o perigo
Hopper: “Defina TARGET=cache e depois pré-visualize a exclusão colocando echo na frente: echo rm -r $TARGET/*”
Shell simulado. Tente ls, ou digite help para ver os comandos.
- cache
- a.tmp
- b.tmp
- my
- my notes.txt
- precious
- mission-data.db
- Veja o perigo
- Conheça o erro de digitação
- Acrescente a proteção
- Coloque o nome entre aspas
Hábitos que salvam você
- Pré-visualize: coloque
echona frente, ou rodelscom o mesmo padrão antes. - Coloque aspas em toda variável:
"$file". - Use
set -euo pipefailnos scripts, e--antes de nomes de arquivos que possam começar com traço. - Confira onde você está:
cd /some/dir && rm -r *não apaga nada se ocdfalhar, mascd /some/dir; rm -r *apaga a partir de onde quer que você estivesse. - Rode o ShellCheck em todo script. Ele pega a maior parte do que esta aula aborda.
- Cuidado com
curl ... | bash: você está rodando código que não leu. Baixe, leia e depois rode.
Experimente
Até 15 XPRevise este script de limpeza
Você está revisando o pull request de um colega. Clique em cada linha que poderia causar um desastre.
Clique em todos os trechos suspeitos. São 4.
Principais conclusões
Não há desfazer, então pré-visualize com echo ou ls.
Coloque aspas nas variáveis e proteja-as com ${var:?}.
Encadeie com && para que uma falha interrompa o passo seguinte.
Rode o ShellCheck e leia os scripts antes de passá-los para o bash por um pipe.
Quiz da aula
5 perguntas · aprovação com 4 acertos · até 50 XP
Ao passar, você conclui a aula e mantém sua sequência. As perguntas erradas voltarão em sessões de revisão.
Pratique: escreva código em scripts Bash
Escreva um script no editor e execute-o de verdade com entradas de exemplo. Cada execução ganha um sandbox Linux novo com Bash 5.2 e as ferramentas GNU no Wandbox, um serviço público gratuito, então experimente à vontade, até com rm. Seu script e a entrada de teste são enviados para lá.
Um limpador de ensaio
Escreva uma função clean que recebe uma pasta. Ela precisa parar com um erro se a pasta estiver vazia ou faltando, usando ${1:?}. Ela não apaga nada: para cada arquivo .tmp da pasta, imprime would delete NAME, e precisa lidar com nomes que têm espaços. O código inicial a chama para você.
- Pré-visualiza com segurança
Seu script roda com Bash 5.2 e ferramentas GNU no Wandbox, um serviço público gratuito, em um sandbox novo a cada execução. Seu script e a entrada de teste são enviados a esse serviço.
Dúvidas sobre esta lição
Travou em algum ponto? Pergunte. Descobriu algo? Compartilhe. Explicar também é uma ótima forma de aprender.
Carregando publicações…