
Diese Funktion sollte das aufrufende Skript beenden:
crash() {
echo error
exit 1
}
Dies funktioniert wie erwartet:
echo before
crash
echo after # execution never reaches here
Dies ist jedoch nicht der Fall:
echo before
x=$(crash) # nothing is printed, and execution continues
echo after # this is printed
Wie erfasse ich das Ergebnis einer Funktion und ermögliche deren Beendigung?
Antwort1
Dies liegt daran, dass $(crash)
die Ausführung crash
in einer Subshell erfolgt und sich daher exit
auf die Subshell und nicht auf Ihr Skript bezieht.
Welchen Sinn hat es, die Ausgabe in einer Variablen zu erfassen, wenn Sie diese nicht verwenden, weil das Skript sowieso beendet wurde?
Antwort2
Dies sollte Ihr Problem lösen:
echo before
x=$(crash) || exit # if crash give -gt 0 value then exit with the same value
echo after