2016-12-22 5 views
3

Um den Exit-Code des Befehls in Bash überprüfen die folgende Logik verwendet:Wie erstellt man eine effiziente Fehlerprüfung im Bash-Skript?

if [ $? -ne 0 ] 
then 
    echo "Error occurred" 
    return 1 
fi 

Mein Problem ist, dass diese Zugabe nach jedem Befehl das Skript sehr lange mit mehreren Kopien derselben Sache macht, und sehr schwer zu pflegen.

Die beste Sache hier wäre eine Funktion, die von allen Standorten aufgerufen werden würde, die der Exit-Code überprüft werden muss. Das Problem ist, dass der Befehl nicht verwendet werden kann, da der aktuelle Prozess beendet wird (die aktuelle Bash-Sitzung wird beendet), sodass nur der Befehl return verwendet werden kann. Bei Verwendung des Rückgabebefehls muss die aufrufende Funktion in einer aufgerufenen Funktion jedoch immer noch den Beendigungscode überprüfen und auf das gleiche Problem zurückkommen.

Gibt es etwas wie MACRO in Bash oder eine andere Möglichkeit zur Fehlerüberprüfung effizienter?

+0

Wie wäre es 'set -e'? – Biffen

+0

Es wird aktuellen Prozess zu töten, und das ist nicht das erforderliche Verhalten –

Antwort

1

Statt dessen:

somecommand 
if [ $? -ne 0 ] 
then 
    echo "Error occurred" 
    return 1 
fi 

Sie müssen keine Bedingungen schreiben auf der $? Variable, Sie den Befehl selbst in if Anweisungen verwenden können:

if ! somecommand 
then 
    echo "Error occurred" 
    return 1 
fi 

Eine andere Alternative besteht darin, eine Hilfsfunktion zu erstellen, die die Aktion bei Fehler einkapselt und die || verwendet Operator nach dem Befehl, um die Funktion aufzurufen und dann return 1 nach:

error() { 
    echo "Error occurred" 
} 

somecommand || { error; return 1; } 

Schließlich, wenn Sie wirklich nicht return 1 brauchen und es Ihnen nichts ausmacht das Skript im Falle des Scheiterns zu verlassen, dann können Sie exit 1 innen die Hilfsfunktion und dann der Anrufer-Code kann kompakter werden:

fatal() { 
    echo "Error occurred" 
    exit 1 
} 

somecommand || fatal 
+0

Vielen Dank !! der Operator || Wahl sieht gut aus, eine Zeile statt 4 jedes Mal –

+0

Sie haben Recht :) –

+0

@ A.David danke, aber wenn ich recht habe, warum haben Sie es immer noch nicht die akzeptierte Antwort markiert? – janos

Verwandte Themen