GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Verwenden Sie Ts, ohne den Exit-Wert zu verlieren?

Für diese Frage gibt es hier bereits Antworten :Exit-Status des Prozesses abrufen, der an einen anderen weitergeleitet wird

(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 ).


Linux
  1. Warum gibt eine main-Funktion ohne return-Anweisung den Wert 12 zurück?

  2. Wie komme ich aus dem Bildschirm heraus, ohne „exit“ einzugeben?

  3. Wie beendet man das X11-Programm ohne Fehler?

  4. wie benutzt man kill SIGUSR2 in bash?

  5. Wie kann ich grep zum Abgleichen verwenden, ohne die Übereinstimmungen zu drucken?

So verwenden Sie ISPConfig und Seafile ohne manuelle Dateiänderungen

So verwenden Sie TeamViewer unter Ubuntu 20.04 Linux ohne Installation

Verwenden Sie Docker-Stop-Container, ohne etwas zu vermasseln!

So verwenden Sie den Echo-Befehl ohne Zeilenumbruch

So verwenden Sie „yum downloadonly“, um ein Paket herunterzuladen, ohne es zu installieren

Verwenden Sie .bashrc, ohne sftp zu beschädigen