bash script trap para exit e err e logic for difference

1

Eu tenho um script bash e gostaria de adicionar a capacidade de interceptar as condições EXIT e ERR. A estrutura é atualmente

trap cleanup EXIT

function notify(reason) {}
function build {}
function dbops {}
function deploy {}
function cleanup {}

notify('start') \
&& build \
&& dbops \
&& deploy \
&& notify('finished');

Qual é a maneira recomendada de adicionar uma interceptação a um erro e (opcionalmente) capturar o motivo da saída e enviá-la por meio da função de notificação? Agora tudo o que a limpeza faz é excluir o arquivo de bloqueio no EXIT.

Eu quero poder enviar uma mensagem notify(reason) para o slack se o script falhar inesperadamente, mas não enviá-lo no EXIT normal.

O meu encadeamento de execução vai interferir na captura adequada de erros?

    
por Brian 21.05.2016 / 00:23

1 resposta

1

Você não pode capturar erros com trap ... ERR nos comandos que tiveram seu código de saída testado. No seu caso particular, na página man bash:

The ERR trap is not executed if the failed command is ... part of a command executed in a && or || list except the command following the final && ...

De modo geral, a maneira mais simples de garantir a limpeza de um conjunto de funções é executá-las em uma subcamada e, no entanto, quando você sai, você ainda pode fazer a limpeza.

    
por 21.05.2016 / 16:26