less
sprawdza, czy stdout
jest to terminal i zachowuje się tak, jak cat
nie jest (kopiuje standardowe wejście na standardowe wyjście, aż do EOF).
Ta funkcja pozwala pisać skrypty lub programy, które zawsze wysyłają dane wyjściowe (np. Dane --help
wyjściowe), less
jednocześnie umożliwiając łatwe przekierowanie do pliku. Byłoby do bani, gdyby some_command --fullhelp > help.txt
nadal czekał na spację na stdin, aby przewinąć tekst lub coś w tym rodzaju. Niektóre polecenia (np. man
) Sprawdzają, czy ich dane wyjściowe decydują, czy wysłać dane wyjściowe za pomocą pagera, czy nie. Jeśli biegniesz man ls > ls.txt
, nigdy nie wywołuje twojego $PAGER
.
less
Zachowanie przypominające kota jest przydatne, jeśli zapomnisz edytować go z jednej linii podczas dodawania kolejnych etapów do rurociągu.
less
musi obliczyć wymiary terminala (rozmiar ekranu, aby wiedzieć, ile linii ma pokazać jednocześnie). ioctl(2)
Używa on stdout
wróci ENOTTY na non-końcowy, więc nie można uniknąć manipulowania niekońcową sprawę tak. less
faktycznie używa isatty(3)
przed sprawdzeniem wymiarów terminala, ale isatty
działa, próbując ioctl-a tylko tty i sprawdzając brak błędu.
Nawet prosty pager jak more(1)
(przynajmniej wersja util-linux) ma tę funkcję, ponieważ jest to prawdopodobnie najprostsze rozsądne zachowanie, które można zastosować w tym przypadku.
Zauważ, że kiedy wpinasz coś do less
(np. grep foo bar.txt | less
), Musi się otwierać /dev/tty
na klawiaturę. (Możesz to zobaczyć za pomocą echo foo | strace less
).
bash script.sh
,bash script.sh | cat
,bash script.sh > file
, i zobaczyć, co wyjście dostać.