Як згадував Вільям Персел , 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. Вони різні речі.