Stellen Sie sicher, dass ein Befehl in bash ausgeführt wurde


7

Ich habe eine Bash-Datei mit Befehlen zum Zusammenführen von PCAP-Dateien. Ich möchte wissen, ob es sowieso gibt, um sicherzustellen, dass eine Zeile in Bash läuft oder nicht. Wie in der Windows Bat-Datei haben wir% ErrorLevel% ¨ Sagen Sie einen Befehl

touch -r dcn_file "${dir_dcn}"/"${TAG1_dcn}".pcap 

Wie stelle ich sicher, dass dies ausgeführt wurde?


3
Sie können echo $?den Rückgabewert des zuletzt ausgeführten Befehls verwenden
Kiwy

1
Sie können auch verwenden set -e, um Bash bei einem Fehler automatisch zu beenden. Sie können auch zusätzlichen Code zuweisen trap, der im Fehlerfall (oder nur am Ende, unabhängig von Fehlern) ausgeführt werden soll
Vi.

Antworten:


12

Muscheln sind so gebaut, dass sie so etwas leicht machen.

if touch -r dcn_file "${dir_dcn}"/"${TAG1_dcn}".pcap 
then
    echo "Command ran successfully."
else
    echo "Command had an error: $?"
fi

Sie werden gelegentlich einen proprietären Befehl finden, der bei Erfolg nicht mit 0 und bei Misserfolg ungleich Null beendet wird, aber zum Glück sind diese Abberationen fast ausgestorben.


1
Mit Ausnahme von grepund seinen Varianten, wobei 0 für gefundene Übereinstimmung steht, 1 für nicht gefundene Übereinstimmung steht ("Fehler"?) Und Codes über 2 Fehler anzeigen.
WinnieNicklaus

9

Die Bash-Variable enthält $?den Exit-Status des letzten Befehlslaufs. Bei typischen Programmen ist der Wert 0Erfolg und jeder andere Wert ist Fehler. Ein spezifischer Rückkehrcode sollte in den Manpages der betreffenden Programme dokumentiert werden.

Sie können Code verwenden wie:

touch -r dcn_file "${dir_dcn}"/"${TAG1_dcn}".pcap
[ $? -ne 0 ]; then
   echo "Command failed: touch: $?"
   return $?
fi

Um den Rückkehrcode zu testen und dann eine Fehlermeldung auszudrucken und ein Skript mit demselben Fehlercode zu beenden.


Während ich eine Dokumentation über nicediesen Morgen las , konnte der Befehl den Wert der Freundlichkeit des Prozesses anstelle von 0 in der alten Version zurückgeben
Kiwy
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.