Gibt es eine Möglichkeit, eine Bash-Funktion zu schreiben, die die gesamte Ausführung abbricht, egal wie sie aufgerufen wird?
War ich mit "exit 1" - Anweisung in mein bash Funktionen zu kündigen, das ganze script und es hat funktioniert:
function func()
{
echo "Goodbye"
exit 1
}
echo "Function call will abort"
func
echo "This will never be printed"
Aber dann merkte ich, dass es nicht die Arbeit machen, wenn genannt wie:
res=$(func)
Verstehe ich, dass ich erstellt eine subshell und "exit 1" bricht das subshell-und nicht der primäre....
Aber gibt es eine Möglichkeit, eine Funktion schreiben, der bricht die ganze Ausführung, egal, wie es genannt wird? Ich muss nur den richtigen Rückgabewert (auch von der Funktion).
InformationsquelleAutor der Frage LiMar | 2012-03-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was Sie könnte tun, ist die Registrierung der top-level-shell für die
TERM
signal zu beenden, und senden Sie dann eineTERM
um die top-level-shell:So, Ihre Funktion sendet eine
TERM
signal zurück an das top-level-shell, die abgefangen und behandelt, mit der zur Verfügung gestellten Befehl, in diesem Fall"exit 1"
.InformationsquelleAutor der Antwort FatalError
Können Sie
set -e
die beendet, wenn ein Befehl beendet sich mit einem nicht-null-status:Oder nehmen Sie die return-Wert:
InformationsquelleAutor der Antwort brice
Aber gibt es eine Möglichkeit, eine Funktion schreiben, der bricht die ganze Ausführung, egal, wie es genannt wird?
Keine.
Ich muss nur den richtigen Rückgabewert (auch von der Funktion).
Können Sie
InformationsquelleAutor der Antwort Luca
Kind-Prozess kann nicht erzwingen, dass der parent-Prozess zu schließen implizit. Sie müssen eine Art von signaling-Mechanismus. Optionen sind eine spezielle return-Wert, oder vielleicht senden einige signal mit
kill
so etwas wieInformationsquelleAutor der Antwort Daenyth