Lassen Sie weniger wie eine Katze arbeiten, wenn nur ein Bildschirm voller Text ist

929
Boldewyn

Öffnet auf meinem Debian-Computer hier lessimmer den alternativen Bildschirm, um Dinge anzuzeigen.

Dies ist ärgerlich, wenn nur 2 oder 3 Zeilen angezeigt werden sollen. Ich möchte lessan:

  • als Pager arbeiten, wenn es mehr als nur einen Bildschirm mit Informationen gibt

  • und arbeiten wie cat, wenn nicht.

Anscheinend lesshat die -FFlagge für "Einzelbildschirm" -Fälle:

-F oder --quit-if-one-Bildschirm

Bewirkt, dass weniger automatisch beendet wird, wenn die gesamte Datei auf dem ersten Bildschirm angezeigt werden kann.

In meinem Fall wird es aber einfach wieder beendet und es werden keine Informationen angezeigt. Es ist mehr cat /dev/nullund daher nicht wirklich nützlich.

Hat jemand eine Idee, wie man dieses lessVerhalten erreichen kann?

6

3 Antworten auf die Frage

4
grawity

Sie können kombinieren -Fmit -X, die die term Initialisierungssequenz deaktiviert.

export LESS=-FX 

Dies hat den (Un) Vorteil, dass lessder angezeigte Text beim Beenden nicht gelöscht wird, egal wie lange die Datei war.

Cool, das ist genau das, wonach ich gesucht habe. Dass der Bildschirm nicht gelöscht wird, ist nur ein kleiner Nachteil. Boldewyn vor 13 Jahren 0
2
David Spillett

Sie könnten so ein kleines Wrapper-Skript erstellen:

#!/bin/bash if (( $(wc -l < "$1") < $ )) then cat "$1" else less "$1" fi 

Wenn Sie das in /usr/local/binoder ~/binals eine Datei erstellen, die so genannt wird less2(Sie möchten vielleicht einen sehr kurzen Namen verwenden, lum sie einfach einzugeben) und sicherstellen, dass sie mit ausführbar ist chmod a+x /usr/local/bin/less2, können Sie sie anstelle von lessBefehlen des Formulars verwenden, d, (oder ).less filenameless2 filenamel filename

Dies funktioniert nicht, wenn Sie die Ausgabe eines anderen Befehls weiterleiten lessoder Optionen oder mehrere Dateinamen angeben.

Es ist zweifellos möglich, dasselbe ohne die zusätzliche Skriptdatei zu tun, indem Sie einen Alias als Funktion definieren, wenn Sie dies bevorzugen.

** `s / ein Alias ​​/ eine Funktion /` ** Der Versuch, eine `if`-Anweisung, die` $ 1` verwendet, in einen Alias ​​zu stopfen, ist der Weg in den Wahnsinn. Das Definieren einer Funktion ist dagegen so einfach wie `less () ` grawity vor 13 Jahren 1
Sie können das Skript mit `HEIGHT = $ (stty size | awk '')` aktualisieren. Dann wäre es eine sinnvolle Erweiterung. Danke für diese Option. Boldewyn vor 13 Jahren 0
@Boldewyn: `bash` hat` $ LINES` (und `$ COLUMNS`), die beim Empfang eines` SIGWINCH` automatisch aktualisiert werden. (Und wenn "checkwinsize" aktiviert ist, wird bei jeder Aufforderung die Aufforderung angezeigt.) grawity vor 13 Jahren 0
Ich verwende diesen Code https://github.com/mpapis/home_dotfiles/blob/master/.functions#L3-30. Er wird kurze Dateien erstellen und Zeilennummern aktivieren, wenn Dateinamen mit: enden. mpapis vor 11 Jahren 0
2
John Mellor

Wie erwähnt von grawity, können Sie passieren -F -Xdies zu erreichen, aber es bedeutet, lesswird viel Text in Ihrem Terminal Rückholung verlassen (und es nicht einmal, um sein könnte, wenn man sich den Text in springen less). lessDas Ausgeben von nichts, wenn Sie nur übergeben, -Fist Problem Nr. 303 .

Stattdessen können Sie ein Wrapper-Skript verwenden. Für langsame Eingaben, wie git log -Gregex, möchten Sie:

A) Zeilen, die auf dem Hauptbildschirm angezeigt werden, sobald sie eingehen, und wechseln zum alternativen Bildschirm, sobald ein Bildlauf erforderlich ist (die erste $LINESAusgabe erscheint daher immer in Ihrem Bildlauf). Wenn ja, gehen Sie mit der zweiten von Gilles Antworten auf eine ähnliche Frage .

B) Zeilen, die auf dem alternativen Bildschirm erscheinen sollen, aber den alternativen Bildschirm verlassen und die Zeilen zum Hauptbildschirm drucken, wenn das Scrollen unnötig ist (daher erscheint keine Ausgabe in Ihrem Scrollback, wenn ein Scrollen erforderlich war); Wenn ja, schauen Sie sich meine Antwort auf eine ähnliche Frage an .