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 .