Como sugerido em esta pergunta , a resposta está configurando um trap no sinal ERR - basicamente set -e corresponde a trap 'exit' ERR . Então, por exemplo, registrar erros, mas continuar a execução, use
trap 'logger -t myscriptname "Command $BASH_COMMAND exited with code $?"' ERR
No bash, a variável $BASH_COMMAND contém o comando incorreto. $? contém o código de saída do último comando executado - observe que, se você quiser executar várias ações, por exemplo, logger ...; echo $? the $? conterá o código de saída de logger , não o de $BASH_COMMAND , então você pode ter que armazená-lo em uma variável primeiro, por exemplo
trap 'EXITCODE=$?; logger -t "Command $BASH_COMMAND exited with code $EXITCODE"; echo "$BASH_COMMAND at line $LINENO exited with code $EXITCODE"' ERR
Claro que é melhor declarar uma função e passar a $? e $BASH_COMMAND em vez de uma linha tão longa!