propagação de erro não está funcionando no bash

1

Eu tenho um script que segue abaixo ...

algumas definições de função no topo e uma delas é ...

function err_out    
{

 trap 'echo "ERROR in $STEP function. EXITING!";exit 1' ERR    
 #some more messages

 exit 1
}

# Main program starts here
trap 'err_out' ERR

#do something
#call some functions
#call cleanup function
#end of script

quando algum erro acontece nas funções, elas não são propagadas e a função err_out não é chamada.

Eu tentei #! / bin / bash -E também; Dessa forma, quando houver um erro, o script é encerrado, mas o que eu preciso é que o erro seja propagado corretamente para o manipulador.

    
por Bashuser 14.03.2011 / 21:00

1 resposta

2

Na página de informações de bash :

All other aspects of the shell execution environment are identical between a function and its caller with these exceptions: the DEBUG and RETURN traps are not inherited unless the function has been given the trace attribute using the declare builtin or the -o functrace option has been enabled with the set builtin, (in which case all functions inherit the DEBUG and RETURN traps), and the ERR trap is not inherited unless the -o errtrace shell option has been enabled.

Então, você precisa set -o errtrace na parte superior do script para que a ERR trap seja propagada em suas funções.

Além disso, você precisa ter cuidado com essa recursiva ERR trap em err_out . Você realmente deseja definir uma nova armadilha no manipulador de erros ou deseja exibir essa mensagem? Se este último, apenas echo it; o trap só seria invocado se um erro ocorresse no seu manipulador de erros.

    
por 14.03.2011 / 21:10