Wie kann ich die BASH-Magie verwenden, um dies zu erreichen?
Ich möchte nur die stderr-Ausgabe auf dem Bildschirm sehen,
aber ich möchte, dass sowohl stdout als auch stderr in eine Datei geschrieben werden.
Klarstellung:
Ich möchte, dass sowohl stdout als auch stderr in derselben Datei landen. In der Reihenfolge, in der sie auftreten.
Leider tut dies keine der Antworten unten.
Akzeptierte Antwort:
Sogar ohne Umleitung oder mit nichts als >logfile 2>&1
, ist es nicht garantiert, dass die Ausgabe in der Reihenfolge der Generierung angezeigt wird.
Für den Anfang wird die Standardausgabe der Anwendung zeilengepuffert (zu tty) oder gepuffert (zu einer Pipeline), aber stderr ist ungepuffert, sodass die Beziehungen zwischen der Reihenfolge der Ausgabe für einen Leser unterbrochen sind. Nachfolgende Phasen in jeder Pipeline, die Sie zusammenstellen könnten, erhalten keinen deterministisch geordneten Zugriff auf die beiden Streams (es handelt sich konzeptionell um Dinge, die parallel ablaufen, und Sie unterliegen immer dem Scheduler – wenn Ihr Leser zu dem Zeitpunkt, an dem Ihr Leser einen Teil erhält, bereits einen Anteil hat in beide Pipes geschrieben, man kann nicht sagen, welche zuerst kam).
„Die Reihenfolge, in der sie geschehen“, ist nur der Anwendung wirklich bekannt. Das Sortieren der Ausgabe über stdout/stderr ist ein bekanntes – vielleicht klassisches – Problem.