Como ter um script bash executando uma ação específica nos erros do comando _each_?

2

Da mesma forma que set -e executa exit em "uncaught" $? != 0 , gostaria que esse evento acionasse a execução de outro comando, por exemplo, uma chamada logger . Como isso pode ser feito?

    
por Tobias Kienzler 14.11.2013 / 10:47

1 resposta

3

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!

    
por 14.11.2013 / 10:47