bash - with - shell script exit




Automatisches Verlassen des Bash-Shell-Skripts bei einem Fehler (5)

Ich habe ein Shell-Skript geschrieben und ich würde es nützlich finden, wenn es die Möglichkeit gibt, die Ausführung des Shell-Skripts anzuhalten, wenn einer der Befehle fehlgeschlagen ist. Siehe unten für ein Beispiel:

#!/bin/bash  

cd some_dir  

./configure --some-flags  

make  

make install

Wenn in diesem Fall das Skript nicht in das angegebene Verzeichnis wechseln kann, würde es nach dem Fehlschlagen sicher kein ./configure mehr machen wollen.

Jetzt weiß ich, dass ich eine if-Prüfung für jeden Befehl durchführen kann (was ich für eine hoffnungslose Lösung halte), aber gibt es eine globale Einstellung, um das Skript zu beenden, wenn einer der Befehle fehlschlägt?


Ein Idiom ist:

cd some_dir && ./configure --some-flags && make && make install

Ich weiß, dass das lange dauern kann, aber für größere Skripts könnte man es in logische Funktionen aufteilen.


Eine Alternative zur akzeptierten Antwort, die in die erste Zeile passt:

#!/bin/bash -e

cd some_dir  

./configure --some-flags  

make  

make install

Ich denke, dass das, was Sie suchen, der trap Befehl ist:

trap command signal [signal ...]

Weitere Informationen finden Sie auf dieser Seite .

Eine weitere Option ist die Verwendung des Befehls set -e am Anfang des Skripts. Dadurch wird das Skript beendet, wenn ein Programm / Befehl einen nicht wahren Wert zurückgibt.


Um das Skript zu beenden, sobald einer der Befehle fehlgeschlagen ist, fügen Sie Folgendes hinzu:

set -e

Dies führt dazu, dass das Skript sofort beendet wird, wenn ein Befehl, der nicht Teil eines Tests ist (wie in einer if [ ... ] Bedingung if [ ... ] oder einem && Konstrukt), mit einem Exit-Code ungleich Null beendet wird.


Verwenden Sie es in Verbindung mit pipefail .

set -e
set -o pipefail

-e (errexit): Skript beim ersten Fehler abbrechen, wenn ein Befehl mit einem Nicht-Null-Status beendet wird (außer in bis oder while-Schleifen, if-tests, Listenkonstrukten)

-o Pipefail: Bewirkt, dass eine Pipeline den Exit-Status des letzten Befehls in der Pipe zurückgibt, der einen Rückgabewert ungleich Null zurückgegeben hat.

Kapitel 33. Optionen







exit