2017-04-18 1 views
0

Ich versuche, ein Shell-Skript zu schreiben, das im Wesentlichen eine Reihe von Funktionen in einem anderen Skript aufruft. Das Skript wie folgt aussieht:Verwenden von set -e und Traps in Shell-Skripten

#!/bin/bash 
set -e 

function cleanup() { 
    exitStatus=$? 
    if [ $exitStatus -ne 0 ]; then 
     rm -rf /tmp/alpha* 
    fi 
    exit $exitStatus 
} 

trap cleanup ERR 

VAR1="test" 

. /home/common/scripts/utils.sh 

echo "Executing function1" 
function1 $VAR1 

echo "Executing function2" 
function2 $VAR1 

exit $? 

Meine Frage ist, dass ich -e sowie Trap, um festlegen muß, um sicherzustellen, dass mein Skript robust ist hier oder-Falle genug ist.

Zweitens: Wenn ich -e in diesem Skript setze, muss ich -e auch in utils.sh setzen, um sicherzustellen, dass die Funktion korrekt in diesem Skript ausgeführt wird, oder die Menge -e in diesem Skript wird dafür sorgen davon?

Antwort

1

set -e beendet das Skript sofort, wenn ein Fehler vorliegt, statt fortfahren. Ob Sie es verwenden oder nicht, hängt vom gewünschten Verhalten ab.

Die trap behandelt nur den Fehler beim Beenden, also wenn Sie über Robustheit besorgt sind, ist die Kombination der beiden wahrscheinlich gut.

Sie sollten set -e in jedes Unterskript eingeben, wenn Sie möchten, dass sie auch bei einem Fehler sofort beendet werden.

+0

Ich kann das Verhalten beim Beenden des Skripts replizieren, indem ich 'exit $?' In meiner Aufräumfunktion hinzufüge, oder? In diesem Fall müsste ich 'set -e' nicht verwenden, oder? – user2277873

+0

Wenn ich 'set -e' in ein Unterskript gesetzt habe und wenn es ein Fehler in diesem Unterskript gibt, wird es auch aus dem Hauptskript herauskommen? (Angenommen, ich habe 'set -e' in das Hauptskript gesetzt) ​​ – user2277873

+1

' set -e' löst Ihre Trap/Cleanup-Funktion sofort aus, wenn einer der Befehle im Skript fehlschlägt. Sonst passiert das Trap/Cleanup beim Beenden des Skripts. Und ja, wenn das oberste Skript 'set -e' hat, dann wird ein fehlgeschlagenes Unterskript dazu führen, dass das oberste Skript beendet wird. –

Verwandte Themen