lessüberprüft, ob stdoutes sich um ein Terminal handelt und verhält sich so, catals wäre es nicht vorhanden (kopiert stdin nach stdout bis EOF).
Mit dieser Funktion können Sie Skripte oder Programme schreiben, die ihre Ausgabe immer senden (z. B. --helpAusgabe), lesswährend die einfache Umleitung in eine Datei weiterhin möglich ist. Es wäre scheiße, wenn man some_command --fullhelp > help.txtimmer noch darauf warten würde, dass die Leertaste auf stdin durch den Text blättert oder so. Einige Befehle (z. B. man) prüfen die eigene Ausgabe, um zu entscheiden, ob die Ausgabe über einen Pager gesendet wird oder nicht. Wenn du rennst man ls > ls.txt, ruft es niemals deine $PAGER.
lessDas katzeähnliche Verhalten von ist praktisch, wenn Sie vergessen, es aus einem Einzeiler heraus zu bearbeiten, wenn Sie einer Pipeline auch mehr Stufen hinzufügen.
lessmuss die Terminalabmessungen ermitteln (Bildschirmgröße, um zu wissen, wie viele Zeilen gleichzeitig angezeigt werden sollen). Die ioctl(2)nutzt auf stdoutwürde ENOTTY auf einem Nicht-Terminal zurückkehren, so dass es die nicht-Terminal Sachbearbeitung ohnehin nicht vermeiden kann. Wird lesstatsächlich verwendet, isatty(3)bevor die Terminalabmessungen überprüft werden. isattyDies funktioniert jedoch, indem ein reines tty-ioctl ausgeführt und auf Fehlerfreiheit überprüft wird.
Sogar ein einfacher Pager wie more(1)(zumindest die Util-Linux-Version) hat diese Funktion, da es wahrscheinlich das einfachste vernünftige Verhalten ist, das für diesen Fall implementiert werden kann.
Beachten Sie, dass beim Pipe- In less (z. B. grep foo bar.txt | less) etwas /dev/ttyfür die Tastatureingabe geöffnet werden muss. (Sie können sehen, dass es dies mit tut echo foo | strace less).
bash script.sh,bash script.sh | cat,bash script.sh > file, und sehen , was Ausgabe , die Sie erhalten.