Як згадував Вільям Персел , lessчитає натискання клавіші користувача з терміналу. Він явно відкриває /dev/ttyкеруючий термінал; що дає йому дескриптор файлу, окремий від стандартного вводу, з якого він може читати інтерактивний ввід користувача. Він може одночасно зчитувати дані для відображення зі свого стандартного введення, якщо необхідно. (При необхідності він також може писати безпосередньо в термінал.)
Ви можете бачити це, запускаючи
some_command | strace -o less.trace -e open,read,write less
Перемістіть вхід, вийдіть lessі подивіться на вміст less.trace: ви побачите його відкритим /dev/tty, і прочитайте з дескриптора файлів 0 і того, що повернуто при відкритті /dev/tty(вірогідно 3).
Це звичайна практика для програм, які хочуть переконатися, що вони читають і записують в термінал. Одним із прикладів є SSH, наприклад, коли він запитує пароль або пароль.
Як пояснив на Шили , якщо /dev/ttyне може бути відкритий, lessбуде зчитуватися з стандартної помилки (дескриптор файлу 2). lessВикористання /dev/ttyбуло введено у версії 177, випущеній 2 квітня 1991 року.
При спробі запуску cat /dev/tty | less, як і запропонував на Хаген фон Eitzen , lessдосягне успіху у відкритті , /dev/ttyале не отримаєте жодної інформації від нього до тих пір , catзакриває його. Так ви побачите екран порожнім, і більше нічого, поки не натиснете, CtrlCщоб вбити cat(або вбити його якось іншим способом); то lessпокаже все, що ви ввели під час catзапуску, і дозволить вам керувати ним.
lessзчитує дані, що відображаються з stdin, і зчитує команди з tty. Вони різні речі.