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
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
trace
Attribut mithilfe desdeclare
integrierten Elements zugewiesen oder die-o functrace
Option wurde mit dem integrierten Element aktiviertset
(in diesem Fall erben alle Funktionen die DEBUG- und RETURN-Traps), und der ERR-Trap wird nicht vererbt, es sei denn, die-o errtrace
Shell-Option wurde aktiviert.