(16 Antworten)
Letztes Jahr geschlossen.
Ich habe ein Build-Skript, das einen langen Befehl ausführt, der viele Ausgaben erzeugt, die so aussahen:
./compile
Um Probleme mit der Kompilierungsleistung zu beheben, möchte ich ts
verwenden (von moreutils), das jeder Ausgabezeile einen Zeitstempel voranstellt. Also habe ich mein Skript wie folgt aktualisiert:
bash -c "./compile | ts '[%Y-%m-%d %H:%M:%S]'"
Das funktioniert, aber jetzt ist der Exit-Wert immer , Ereignis beim
compile
schlägt fehl (ich denke, weil ts
wird ohne Fehler beendet).
Wie kann ich mein Skript aktualisieren, um compile
zurückzugeben ’s Exit-Code bei Verwendung von ts
?
Akzeptierte Antwort:
Da Sie Bash verwenden, können Sie dessen $PIPESTATUS
verwenden Dies ist ein Array, das die verschiedenen Exit-Codes der Befehle in einer Pipeline enthält:
bash -c './compile | ts "[%Y-%m-%d %H:%M:%S]"; exit "${PIPESTATUS[0]}"'
zsh
hat eine ähnliche Funktion, verwendet aber den $pipestatus
array statt (denken Sie auch an zsh
Arrays werden ab 1
nummeriert , nicht ).