2016-10-26 2 views
0

ich einen Shell-Skript, wie unten mit mehreren Befehlen habeCapturing Exit-Status eines fehlgeschlagenen Befehls in einem Shell-Skript

cmd-1 
cmd-2 
cmd-3 
.... 
cmd-n 

ich die Shell-Script-Ausführung will auch weiterhin, wenn ein Fehler in der Mitte ist zB cmd -3 oder cmd-7. Um dies zu erreichen, habe ich set + e verwendet. Dadurch kann ich die Ausführung fortsetzen, aber ich kann den Beendigungsstatus des fehlgeschlagenen Befehls nicht erfassen (da der Beendigungsstatus des Skripts immer auf dem letzten Befehl basiert). Gibt es eine Möglichkeit, den Status des vollständigen Skripts basierend auf dem letzten fehlgeschlagenen Befehl festzulegen.

+0

Mögliches Duplikat von [Checking Bash Exit Status von mehreren Befehlen effizient] (http://StackOverflow.com/questions/5195607/Checking-bash-Exit-Status-of-several-Commands-efficiently) – Joe

+0

check this out: http://stackoverflow.com/questions/5195607/checking-bash-exit-status-of-several-commands-efficiently – aliasav

+0

Danke Joe & aliasav für die oben genannten Links. Jedoch konnten set -e und '&&' den Zweck nicht lösen, da sie die Skripte bei jedem Fehler beenden. Ich möchte bis zum letzten Befehl fortfahren, auch im Falle eines Fehlers, aber ich möchte den Exit-Status des vollständigen Skripts auf den Exit-Status des letzten fehlgeschlagenen Befehls setzen. Ähnlich wie -o pipefail, wenn Befehle übergeben werden. In meinem Fall werden Befehle nicht weitergeleitet. – user1602397

Antwort

1

Sie können es so erreichen. Nicht zu sauber, aber ziemlich einfach.

exit_code=0 
cmd-1 || exit_code=$? 
cmd-2 || exit_code=$? 
cmd-3 || exit_code=$? 
.... 
cmd-n || exit_code=$? 
exit $exit_code 

Der saubere Weg wäre, Ihren Code auf Funktionen aufzuteilen und das Ergebnis Ihrer Befehle dort zu überprüfen.

Verwandte Themen