Ich beobachte die Ausgabe meines komplizierten Befehls mit less
, das Problem ist, dass das stderr
verloren geht. stderr
Zeilen werden normalerweise zwischen den stdout
Zeilen im Inneren aufgelistet less
. Ich möchte, dass sie auf der Konsole gedruckt werden und beim Beenden less
gemeinsam dort angezeigt werden.
Ich weiß , es könnte keine Lösung für dieses Problem sein, las ich über tee
und multitee
aber kein Glück so weit.
stderr
umgeleitet wirdstdout
, alle Ausgaben anstderr
werden auf den normalen Ausgang gemischt werdenstdout
. Wenn Sie diesen Ausgang an weiterleiten,less
werden beide angezeigt .less
, um den Bildschirm neu zu malen.Antworten:
Könnte sein
Nachtrag
Hier folgt eine Klarstellung für Leute, die es versäumen, die Frage sorgfältig zu lesen, und die den klarstellenden Kommentar des OP oben nicht gelesen haben.
Haelix wies darauf hin:
und schrieb in einem Kommentar für frühe Antwortende:
Das Problem ist wahrscheinlich plattformspezifisch, es ist sicherlich etwas, das ich auf älteren Unix SVR4-Plattformen erlebt habe.
Wenn Sie auf solchen Plattformen so etwas tun
Fehlermeldungen (z. B. Verzeichnisberechtigungen) werden in weniger Fällen so angezeigt
so dass Ausgangsleitungen durch Fehlermeldungen verdeckt werden.
Wenn Sie die Seite aktualisieren, werden die Ausgabezeilen korrekt angezeigt, aber Sie verlieren die Fehlermeldungen. Wenn Sie weniger beenden, wird der Bildschirm bis auf eine Eingabeaufforderung gelöscht.
Wenn du so etwas machst
Die Fehlermeldungen werden mit der Standardausgabe vermischt. Wenn Sie weniger beenden, ist der Bildschirm wieder leer.
Wenn Sie zuerst nur die Standardausgabe in weniger lesen möchten und dann nach dem Beenden von weniger die Fehlermeldungen sehen möchten, benötigen Sie eine andere Lösung.
Das habe ich in meiner ursprünglichen zweizeiligen Antwort vorläufig vorgeschlagen.
quelle
Sie müssen umleiten
stderr
zustdout
:Überprüfen Sie das Handbuch für Ihre Shell (z
man bash
. B. )quelle
Sagen Sie der Shell einfach, dass sie fd 2 nach fd 1 umleiten soll (stderr nach stdout).
quelle
Eine Sache, die bisher in allen Antworten fehlte, ist der Grund, warum dies geschieht. Das Problem hierbei ist eine Art Race-Bedingung zwischen dem Prozess, der Daten an das Terminal ausgibt,
stderr
und derless
Anzeige der Ausgabestdout
auf dem Terminal. Wennless
die Anzeige beginnt, nachdem alle Ausgaben anstderr
das Terminal gedruckt wurden,less
wird dies beibehalten, und Sie können die Meldungen nach dem Beenden sehenless
. Wenn OTOHless
bereits mit der Anzeige von Inhalten begonnen hat, vermischen sich Fehlermeldungen mitless
der Ausgabe und nach dem Beenden bleibt nichts erhaltenless
(daless
das Terminal nur so bleibt, wie es vor dem Start war, und nichts über die dazwischen liegenden Fehlermeldungen weiß).Sie können das leicht sehen, wenn Sie z
Alle Fehlermeldungen "Berechtigung verweigert" werden mit der
less
Ausgabe verwechselt, und nach dem Beenden wird nichts mehr angezeigt. Wenn Sie tunAlle (oder zumindest die meisten) Fehlermeldungen wurden auf dem Terminal gedruckt, bevor
less
die Ausgabe angezeigt werden kann. Anschließend werden die Fehlermeldungen angezeigt.Natürlich möchten Sie normalerweise nicht 10 Sekunden warten, bevor Sie starten
less
, aber unter Linux können Sie auch Bruchwerte für die Wartezeit angeben, und bei schnell laufenden Prozessen reicht oft etwassleep 0.1
aus, um die Rennbedingungen zu vermeiden. (Aber natürlich, wenn Sie wollen oder müssen auf der seine wirklich sicheren Seite Einsatz RedGrittyBrick-Lösung).quelle
Sie müssen das Konzept der "Dateideskriptoren" verstehen. Normalerweise startet eine Unix-Anwendung mit drei speziellen Dateideskriptoren:
Die "Pipe"
|
in der Shell verbindet sichstdout
von einem Prozess mitstdin
dem nächsten.Fehler werden vom Design her nicht in
stdin
den nächsten Prozess eingespeist . Sie sind für die nächste Anwendung oft nicht sinnvoll und sollten dem Benutzer nicht verborgen bleiben.Wenn Sie die Fehler in stdout mischen möchten, können Sie z. B.
2>&1
"stderr an stdout anhängen" verwenden. Zum Beispielsollte auch Fehlerausgabe von unzugänglichen Dateien enthalten.
gibt Ihnen nur die Fehler.
quelle
Ich bin verwirrt über Ihre Frage, soweit ich sagen kann, dass Ihr gewünschtes Verhalten die Standardeinstellung ist.
Wenn ich benutze
um einen einfachen Test zu bekommen,
macht genau das, was du fragst. Das sehe ich
in
less
undwenn ich aufhöre
less
quelle
echo info ; echo error 1>&2
) und wiederholen Sie den Test: Beide Zeilen werden auf weniger geleitet.Ich bin kürzlich in einem meiner Debian 5.0 auf dieses Problem gestoßen. Zum Beispiel ls abc | weniger finde ich, dass die Fehlermeldung in weniger geht, was gegen mein Wissen.
Nach einigen Versuchen stellte ich fest, dass es sich nur um Bildschirmpuffer handelt. stderr geht eigentlich NICHT auf weniger ein. Sie können die Aufwärts- oder Abwärtspfeiltasten (oder j / k) verwenden, um dies zu demonstrieren.
quelle