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!