Skip to content
Latchkey

O Que É set -e? Falhando um Script no Primeiro Erro

set -e (errexit) diz ao shell para sair imediatamente se qualquer comando retornar um exit code diferente de zero, então um script para na primeira falha.

Por padrão, um script de shell continua rodando mesmo após um comando falhar, o que pode transformar um passo quebrado em uma cascata de erros confusos. set -e muda isso: o script aborta no momento em que um comando falha. É uma pedra angular do scripting de CI seguro, geralmente escrito como parte de set -euo pipefail.

O que set -e faz

Com set -e ativo, o shell sai assim que um comando simples retorna um status diferente de zero, em vez de seguir em frente. Isso transforma uma falha silenciosa em uma parada imediata e visível.

Por que o padrão é perigoso

Sem set -e, um comando de build com falha não para o script, então o próximo comando roda contra saída ausente ou desatualizada. O job pode até reportar sucesso, escondendo a falha real.

Ressalvas importantes

  • Comandos em uma condição if ou && são isentos, por design.
  • Uma falha dentro de um pipeline não é capturada a menos que pipefail também esteja definido.
  • Funções e subshells têm suas próprias sutilezas.

Lidando com falhas esperadas

Às vezes um comando pode falhar. Você pode anexar || true para ignorar seu status, ou envolvê-lo em um if, para que set -e não aborte o script inteiro por uma falha que você antecipou.

set -e no CI

Passos de CI devem parar no instante em que algo quebra, para que a falha aponte para a causa real. Começar um passo com set -e (idealmente set -euo pipefail) garante que um comando com falha faça o passo falhar em vez de ser varrido para debaixo de saída posterior.

Falhas honestas em runners gerenciados

Nos runners da Latchkey, set -e faz um passo sair com código diferente de zero no momento em que um comando falha, o que a plataforma reporta como uma falha limpa. Essa clareza ajuda a separar bugs genuínos de contratempos transitórios de infraestrutura que podem ser repetidos.

Principais conclusões

  • set -e faz um script sair no primeiro comando que falha.
  • Ele não captura falhas de pipeline sozinho; combine-o com pipefail.
  • No CI, set -e transforma falhas silenciosas em paradas imediatas e visíveis.

Guias relacionados