Usando o trap com ERR: Como faço para enviar $?

0

No bash 4.x Se eu tiver:

err_handler() {
    echo You received error $1|mail -s "script error" MAILTO
}

trap err_handler ERR

como faço para enviar a saída stderr atual para a função quando o trap é chamado? Eu quero evitar ter que colocar lógica em cada linha para redirecionar o stderr, isso é o ponto de uma armadilha, eu acho.

    
por Gregg Leventhal 16.05.2014 / 18:02

1 resposta

2

Não há como capturar retroativamente a saída de erro, porque no momento em que o comando retorna com um status de saída diferente de zero, a saída já foi concluída. No entanto, você pode redirecionar toda a saída stderr do seu script desde o início para um arquivo, emitindo o comando

exec 2>/some/file

no início do seu script. Esta forma de exec sem comandos aplica os redirecionamentos ao processo de shell atual. Você pode enviar esse arquivo em caso de erro.

Uma vantagem adicional desse método é que, se o envio do email falhar por algum motivo, você ainda terá o arquivo em volta para examinar localmente (bem, a menos que o motivo seja uma falha desse disco, é claro).

    
por 16.05.2014 / 20:22