Deixe-me adivinhar que existe a opção set -e
(ou a forma longa set -o errexit
) na sua .bashrc
( .bash_profile
).
-e
Saia imediatamente se um pipeline (que pode consistir de um único comando simples ), um subshell comando entre parênteses, ou um dos comandos executado como parte de uma lista de comandos entre colchetes (ver SHELL GRAMMAR acima) sai com um status diferente de zero. O shell não sai se o comando que falha faz parte da lista de comandos imediatamente após uma enquanto ou até palavra-chave, parte do teste seguindo as palavras if ou elif reservada, parte de qualquer comando executado em & amp; & amp; ou || lista, exceto o comando após o final & amp; & amp; ou || , qualquer comando em um pipeline mas o último, ou se o valor de retorno do comando é sendo invertido com ! . Uma armadilha em ERR , se definido, é executado antes do shell sair. Esta opção aplica-se a o ambiente shell e cada ambiente subshell separadamente (consulte EXECUÇÃO DO COMANDO AMBIENTE acima) e pode fazer com que as subcaixas sair antes de executar todos os comandos na sub-camada.
- bash (1)
Esta opção é muito útil para alguns scripts - permite evitar numerosos || exit 1
, e. g. em vez de
cd /var/ || exit 1
tar -cvf myarchive.tar "$SOMEDIR" || exit 1
rm -r "$SOMEDIR"
você pode escrever
set -e
cd /var/
tar -cvf myarchive.tar "$SOMEDIR"
rm -r "$SOMEDIR"
Mas é claro que não há motivo para configurá-lo para a sessão bash interativa.