set -e
aka set -o errexit
não se aplica a comandos que são partes de condições como:
if cmd; do
until cmd; do
while cmd; do
cmd || whatever
cmd && whatever
Isso também se aplica ao ERR
trap para shells que o suportam.
Assim, uma maneira idiomática de ignorar a falha de um comando é com:
cmd || : errors ignored
Ou apenas:
cmd || true
cmd || :
Isso cancela set -e
para essa invocação de cmd
e também define $?
para 0 (para a de :
/ true
quando cmd
falha)
cmd && true
ret=$?
Também cancela set -e
, mas preserva o status de saída de cmd
.