armadilha de script bash para sair e errar e lógica para diferença

armadilha de script bash para sair e errar e lógica para diferença

Eu tenho um script bash e gostaria de adicionar a capacidade de capturar as condições EXIT e ERR. A estrutura está 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 armadilha para um erro e (opcionalmente) capturar o motivo da saída e enviá-lo por meio da função de notificação? No momento, tudo o que a limpeza faz é excluir o arquivo de bloqueio em EXIT.

Quero poder enviar uma notify(reason)mensagem para o Slack se o script falhar inesperadamente, mas não enviá-la no EXIT normal.

Meu encadeamento de execução interferirá na captura adequada de erros?

Responder1

Você não pode detectar erros trap ... ERRem comandos cujo código de saída foi testado. No seu caso específico, na página de manual do bash:

A armadilha ERR não será executada se o comando com falha for ... parte de um comando executado em um && ou || list, exceto o comando após o final && ...

De modo geral, a maneira mais simples de garantir a limpeza de um conjunto de funções é executá-las todas em um subshell e, independentemente de como ele sair, você ainda poderá fazer a limpeza.

informação relacionada