La trampa no funciona

La trampa no funciona

Tengo un script de shell que contiene trap, pero trap no parece funcionar como se esperaba. A continuación se muestra el código y la versión de bash.

GNU bash, versión 4.2.46(2) (x86_64-redhat-linux-gnu)

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

La trampa anterior funciona si lo hago

function login(){
  trap exit_message ERR
  false
}

Respuesta1

Deel manual de bash:

Todos los [...] aspectos del entorno de ejecución del shell son idénticos entre una función y su llamador con estas excepciones: las trampas DEBUG y RETURN no se heredan a menos que a la función se le haya dado el traceatributo usando el declareincorporado o la -o functraceopción se haya habilitado con el setincorporado (en cuyo caso todas las funciones heredan las trampas DEBUG y RETURN), y la trampa ERR no se hereda a menos que -o errtracese haya habilitado la opción Shell.

información relacionada