Automatisches Rohr weniger, wenn das Ergebnis ist mehr als eine Seite auf meiner shell?
Meist verwende ich nicht | less
für jede und jeden Befehl von der shell aus.
Rohr weniger wird nur verwendet, wenn ich eigentlich führen Sie den Befehl ohne ist und finden heraus, dass es nicht auf die Seite passen. Das kostet mich zwei Läufe mit der gleichen shell-Befehl.
Ist es so, dass jedes mal, wenn ein Befehl Ergebnis ist mehr als eine display-Seite, es wird automatisch an weniger?
- warum? Es sieht aus wie eine ganz gute Frage, über die Programmierung der shell zu mir.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das wichtigste problem, mit dem Versuch zu tun, das ist, wie es zu deaktivieren, wenn Sie Programme ausführen, benötigen eine tty-Schnittstelle.
Was ich empfehlen würde ist, dass für die Programme und Dienstprogramme, die Sie Häufig verwenden, erstellen shell-Funktionen, wickeln Sie Sie und Pfeife auf
less -F
. In einigen Fällen können Sie den Namen der Funktion das gleiche wie das Programm und es wird Vorrang, kann aber überschrieben werden.Hier ist ein Beispiel für eine wrapper-Funktion, die würde, die getestet werden müssen und vielleicht einige zusätzlichen code, um zu behandeln Sonderfälle, etc.
Wenn Sie den gleichen Namen verwenden wie ich im Beispiel, es könnte brechen die Dinge, die erwarten, dass die sich anders Verhalten. Überschreiben Sie die Funktion ausführen, um das zugrunde liegende Programm direkt vorausgehen mit
command
:laufen
foo
ohne Verwendung der Funktion mit dem gleichen Namen.less
macht anmutig biegen Sie in diecat
wenn der output ist kein tty.less -F
scheint Weg zu werfen den Ausgang, wenn es auf eine Seite passen. Ich kann nicht erkennen, auf welche Einstellungen es hängt, aber.less -E
hat das gleiche problem.less -X -F
erreicht das gewünschte Verhalten (-X
Deaktivierung weniger features zur Reinigung des Terminals auf beenden). Aber es hat den Nebeneffekt, messing mit dem terminal auf einem normalen Lauf derless
. Und auf manchen Systemen (zum Beispiel ein virtuelles terminal auf der gleichen Maschine),less -F
funktioniert wie erwartet, und eine "echte"less
noch reinigt den Bildschirm auf beenden.termcap
signal. Zum Beispiel, diese Frage auf unix.stackexchange.com ( preview.tinyurl.com/l8grc4w ) rät zu verwenden-X
. Es sind auch einige details für das gnome-terminal Fall auf diesem blog-post: preview.tinyurl.com/jvv9robif [[ -t 1 ]]; then do_something |less -F; else do_something; fi
Weiterreichen
less -F
aka--quit-if-one-screen
:Könnte man immer ein Rohr weniger,- E (dieser wird dazu führen, dass weniger automatisch beenden am Ende der Datei). Für Befehle mit kurzen Ausgang, es würde tun, was Sie wollen. Ich glaube nicht, können Sie automatisch ein Rohr weniger, wenn es eine Menge von output.
Im Allgemeinen automatisch Rohrleitungen zu
less
erfordert der shell werden vorausschauend über die Ausgabe, die erzeugt werden, indem die Befehle, die es läuft - und es ist schwer genug für Menschen, um vorherzusagen, dass ohne zu versuchen, Programme zu tun.Könnten Sie schreiben, eine shell, die es für Sie tut - das fängt den Ausgang (aber was ist mit stderr?) und paginiert, wenn nötig, aber es würde sicherlich nicht ein standard-shell.
Schrieb ich diese wrapper-Funktion, und legen Sie es in meine .Profil. Sie können diese nutzen, bevor ein Befehl und es wird automatisch eine Leitung es weniger, wenn es mehr als 1 Seite.
So 'lcmd ls' ls würde das aktuelle Verzeichnis und leiten Sie die Ausgabe auf weniger.
echo
brechen, wenn die Ausgabe länger ist als die max command line Länge."$@" | less -F
ist genug. Und die Semikolon sind unnötig zu.