Falle funktioniert nicht

Falle funktioniert nicht

Ich habe ein Shell-Skript, das Trap enthält, aber Trap scheint nicht wie erwartet zu funktionieren. Unten ist der Code und die Bash-Version

GNU Bash, Version 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

Die obige Falle funktioniert, wenn ich

function login(){
  trap exit_message ERR
  false
}

Antwort1

Ausdas Bash-Handbuch:

Alle [...] Aspekte der Shell-Ausführungsumgebung sind zwischen einer Funktion und ihrem Aufrufer identisch, mit folgenden Ausnahmen: Die DEBUG- und RETURN-Traps werden nicht vererbt, es sei denn, der Funktion wurde das traceAttribut mithilfe des declareintegrierten Elements zugewiesen oder die -o functraceOption wurde mit dem integrierten Element aktiviert set(in diesem Fall erben alle Funktionen die DEBUG- und RETURN-Traps), und der ERR-Trap wird nicht vererbt, es sei denn, die -o errtraceShell-Option wurde aktiviert.

verwandte Informationen