Erfassen Sie das Ergebnis der Bash-Funktion und lassen Sie es beenden

Erfassen Sie das Ergebnis der Bash-Funktion und lassen Sie es beenden

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 crashin einer Subshell erfolgt und sich daher exitauf 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

verwandte Informationen