Jak wspomniał William Pursell , less
odczytuje naciśnięcia klawiszy użytkownika z terminala. Otwiera się jawnie /dev/tty
, terminal kontrolny; co daje mu deskryptor pliku, niezależny od standardowego wejścia, z którego może odczytać interaktywne dane wejściowe użytkownika. W razie potrzeby może jednocześnie odczytać dane do wyświetlenia ze standardowego wejścia. (W razie potrzeby może również pisać bezpośrednio do terminala).
Możesz to zobaczyć, uruchamiając
some_command | strace -o less.trace -e open,read,write less
Poruszaj się po wejściu, wyjdź less
i spójrz na zawartość less.trace
: zobaczysz, że jest otwarta /dev/tty
, i czytaj zarówno z deskryptora pliku 0, jak i tego, który zwrócił podczas otwierania /dev/tty
(prawdopodobnie 3).
Jest to powszechna praktyka dla programów, które chcą mieć pewność, że czytają i piszą na terminalu. Jednym z przykładów jest SSH, np. Gdy prosi o hasło lub hasło.
Jak wyjaśniono przez Schily , jeśli /dev/tty
nie można otworzyć, less
będzie czytać z jej błędu standardowego (deskryptor pliku 2). less
użycie /dev/tty
zostało wprowadzone w wersji 177, wydanej 2 kwietnia 1991 roku.
Jeśli spróbujesz działa cat /dev/tty | less
, jak sugerowano przez Hagen von EITZEN , less
uda się otwarcie /dev/tty
, ale nie otrzyma żadnych danych z niego aż cat
je zamyka. Więc zobaczysz ekran pusty i nic więcej, dopóki nie naciśniesz, CtrlCaby zabić cat
(lub zabić w inny sposób); Następnie less
pokaże cokolwiek wpisane natomiast cat
został uruchomiony, i pozwalają go kontrolować.
less
odczytuje dane do wyświetlenia ze standardowego wejścia i odczytuje polecenia z tty. To są różne rzeczy.