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

Nur Stderr auf dem Bildschirm anzeigen, aber sowohl Stdout als auch Stderr in Datei schreiben?

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.


Linux
  1. Möglichkeit, die Ausgabe eines Programms umzuleiten und trotzdem nach Stdout zu gehen?

  2. Ausgabe umleiten und leiten?

  3. Wie leite ich stderr und stdout in verschiedene Dateien in derselben Zeile im Skript um?

  4. Ist es möglich, dass der Linux-Dateideskriptor 0 1 2 nicht für stdin, stdout und stderr gilt?

  5. Stellen Sie fest, ob die Ausgabe stdout oder stderr ist

Bash:In Datei schreiben

So leiten Sie stderr in Bash auf stdout um

Verwirrt über stdin, stdout und stderr?

Wie kann die Ausgabe von ls beschränkt werden, um nur Dateiname, Datum und Größe anzuzeigen?

bash:leite stderr auf Datei und stdout + stderr auf Bildschirm um

Erfassen von STDERR und STDOUT in einer Datei mit tee