Fangschale Beendigungscode
-
19-09-2019 - |
Frage
ich auf einem Shell-Skript arbeitete, und will verschiedenen Exit-Codes behandeln, die ich stoßen könnte. Um zu versuchen, die Dinge aus, ich bin mit diesem Skript:
#!/bin/sh
echo "Starting"
trap "echo \"first one\"; echo \"second one\"; " 1
exit 1;
Ich glaube, ich bin etwas fehlt, aber es scheint, ich kann meine eigene „exit 1“ nicht stoppen. Wenn ich zu stoppen 0 alles versuchen funktioniert:
#!/bin/sh
echo "Starting"
trap "echo \"first one\"; echo \"second one\"; " 0
exit
Gibt es etwas, was ich über Trapping HUP (1) Exit-Code wissen sollte?
Lösung
trap
Versendungen Signale auf den Prozess empfängt (beispielsweise von einem kill
), nicht auf Beendigungscodes, mit trap ... 0 für Prozess Ende reserviert ist. trap /blah/blah 0
wird entweder versenden exit 0
oder exit 1
Andere Tipps
Das ist nur ein Exit-Code, es bedeutet nicht, HUP. So Ihr trap ... 1
sucht HUP, aber der Ausgang ist nur eine Ausfahrt.
Zusätzlich zu den Systemsignale, die Sie, indem Sie trap -l
auflisten können, können Sie einige spezielle Bash sigspecs verwenden: ERR, EXIT, RETURN und DEBUG. In allen Fällen sollten Sie den Namen des Signals eher als die Zahl zur besseren Lesbarkeit verwenden.
Sie können auch verwenden || Operator mit einem || b, b wird ausgeführt, wenn ein ausgefallener
#!/bin/sh
failed
{
echo "Failed $*"
exit 1
}
dosomething arg1 || failed "some comments"