Kann weniger (durch Drücken von F) einer weitergeleiteten Eingabe folgen (ähnlich einer Datei)? Für eine Datei, in die geschrieben wird, der Befehl
less <file>
folgt der Datei, wenn Sie F drücken.
Aber wenn ich einen Befehl habe, den Pipes direkt in weniger ausgeben, so
command | less
Drücken von F wird nichts tun.
Wie es aussieht, können Pipes nicht wie Dateien verfolgt werden? Oder hat es vielleicht damit zu tun, dass der Befehl auch an STDERR schreibt? Der Effekt, den ich erzielen möchte, ist, immer die neueste Ausgabe des Befehls zu sehen: So als würde man PageDown gedrückt halten!
Eine verwandte Bemerkung gilt für G (zum Ende gehen): Wenn Sie direkt zu weniger leiten, funktioniert dies nicht.
Antworten:
Durch Drücken von Foder Gwird
less
versucht, den Eingang EOF zu erreichen. Wenn es sich bei der Eingabe um eine Pipe handelt, bleibt sieless
hängen, bis die Pipe auf der anderen Seite geschlossen wird (und nicht "tut nichts").Dies kann umgangen werden, indem die Befehlsausgabe in einer temporären Datei im Hintergrund gespeichert und dann als Eingabe für Folgendes verwendet wird
less
:Es gibt keine Option, dies
less
nur in zu tun ; Ich gebe jedoch zu, dass es nützlich wäre.quelle
less
hängen, bis die Pipe auf der anderen Seite geschlossen wird . Das ist eine Art irreführende Aussage. Was passiert, ist, dass weniger Anruferead
in einem blockierenden Modus auf neue Daten oder das Schließen der Pipe warten .less
nicht nur ein blockierender Lesevorgang ausgeführt, sondern auch in einer Schleife, die auf EOF wartet. Und ein EOF an einem Rohr tritt nur auf, wenn seine andere Seite geschlossen ist.less
der Bildschirm in dieser Schleife aktualisiert würde, gäbe es kein Problem. Das Blockieren des Lesens hat mit diesem Problem wenig zu tun.less
kann den Bildschirm nicht aktualisieren, wenn keine Daten vorhanden sind. Wenn Datenless
angezeigt werden, die denJa, beginnend mit Version 474. Es wird jedoch noch nicht in den Versionshinweisen einer Version erwähnt, da derzeit noch ein Problem mit dieser Funktion besteht. Unten ist ein Kommentar des Betreuers von less - Mark Nudelman:
In Bezug auf den F-Befehl für Pipes ist dies auch in less-474 behoben. Anstatt nach EOF zu suchen, sucht der F-Befehl nach dem Ende der gepufferten Eingabe und beginnt dort mit dem Lesen. Es ist jedoch nicht wirklich verwendbar, da beim Drücken von STRG-C zum Stoppen des F-Befehls der Prozess abgebrochen wird, der die Ausgabe erzeugt. Ich bin mir nicht sicher, wie ich das beheben soll.
Solange dieses Problem nicht behoben ist, können Sie es mithilfe von Shell-Funktionen umgehen. Siehe meine Antwort auf Gibt es eine Möglichkeit, den Verfolgungsmodus „Weniger“ zu beenden, ohne andere Prozesse in der Pipe anzuhalten? Frage für Details.
Als Referenz hat das Problem mit F, das nicht mit Pipes arbeitet, die Referenznummer 300 in der Liste der bekannten Fehler und trägt den Titel Der Befehl F funktioniert nicht bei Pipe-Eingaben.
Es funktioniert ab Version 466. von Unter Berufung auf Release Notes für diese Version:
quelle
Aus der less man Seite
Das sollte also funktionieren und es funktioniert tatsächlich für mich.
quelle