Armadilha não funciona

Armadilha não funciona

Eu tenho um script de shell contendo trap, mas trap não parece funcionar como esperado abaixo está o código e a versão bash

GNU bash, versão 4.2.46(2)-release (x86_64-redhat-linux-gnu)

set -e
function exit_message(){
  echo -e "\e[31m\nError occurred "
}
function login(){
  false
}
trap exit_message ERR
login

A armadilha acima funciona se eu fizer isso

function login(){
  trap exit_message ERR
  false
}

Responder1

Deo manual do bash:

Todos os [...] aspectos do ambiente de execução do shell são idênticos entre uma função e seu chamador, com estas exceções: as armadilhas DEBUG e RETURN não são herdadas, a menos que a função tenha recebido o traceatributo usando o declarebuiltin ou a -o functraceopção tenha sido habilitada com o setinterno (nesse caso, todas as funções herdam as armadilhas DEBUG e RETURN), e a armadilha ERR não é herdada, a menos que a -o errtraceopção shell tenha sido habilitada.

informação relacionada