Jak wspomniał William Pursell , lessodczytuje 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ź lessi 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/ttynie można otworzyć, lessbędzie czytać z jej błędu standardowego (deskryptor pliku 2). lessużycie /dev/ttyzostał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 , lessuda się otwarcie /dev/tty, ale nie otrzyma żadnych danych z niego aż catje 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 lesspokaże cokolwiek wpisane natomiast catzostał uruchomiony, i pozwalają go kontrolować.
lessodczytuje dane do wyświetlenia ze standardowego wejścia i odczytuje polecenia z tty. To są różne rzeczy.