Ich erstelle ein Shell-Skript mit einer if
Funktion wie dieser:
if jarsigner -verbose -keystore $keyst -keystore $pass $jar_file $kalias
then
echo $jar_file signed sucessfully
else
echo ERROR: Failed to sign $jar_file. Please recheck the variables
fi
...
Ich möchte, dass die Ausführung des Skripts nach dem Anzeigen der Fehlermeldung abgeschlossen wird. Wie kann ich das machen?
Wenn Sie
set -e
ein Skript eingeben, wird das Skript beendet, sobald ein darin enthaltener Befehl fehlschlägt (dh sobald ein Befehl einen Status ungleich Null zurückgibt). Auf diese Weise können Sie keine eigene Nachricht schreiben, aber häufig reichen die eigenen Nachrichten des fehlgeschlagenen Befehls aus.Der Vorteil dieses Ansatzes besteht darin, dass er automatisch abläuft: Sie laufen nicht Gefahr, zu vergessen, einen Fehlerfall zu behandeln.
Befehle, deren Status durch eine Bedingung (z. B. oder ) getestet wird
if
, beenden das Skript nicht (andernfalls wäre die Bedingung sinnlos). Eine Redewendung für gelegentliche Befehle, deren Fehler keine Rolle spielen . Sie können auch einen Teil des Skripts mit deaktivieren .&&
||
command-that-may-fail || true
set -e
set +e
quelle
-x
Flag mit dem-e
Flag zu verwenden, um festzustellen, wo sich Ihr Programm beim Beenden befindet. Dies bedeutet, dass der Benutzer des Skripts auch der Entwickler ist.Wenn Sie in der Lage sein möchten, einen Fehler zu behandeln, anstatt ihn blind zu beenden, anstatt ihn zu verwenden
set -e
, verwenden Sie eintrap
für dasERR
Pseudosignal.Andere Traps können so eingestellt werden, dass sie andere Signale verarbeiten, einschließlich der üblichen Unix-Signale sowie der anderen Bash-Pseudosignale
RETURN
undDEBUG
.quelle
Hier ist der Weg, um es zu tun:
quelle
exit 1
ist alles, was du brauchst. Das1
ist ein Rückkehrcode, also können Sie ihn ändern, wenn Sie beispielsweise1
einen erfolgreichen Lauf und-1
einen Fehler oder ähnliches bedeuten möchten .quelle
test
oder&&
oder hilfreich sein||
.