Come menzionato da William Pursell , less
legge le battute dell'utente dal terminale. Apre esplicitamente /dev/tty
il terminale di controllo; che gli fornisce un descrittore di file, separato dall'input standard, dal quale può leggere l'input interattivo dell'utente. Può leggere simultaneamente i dati da visualizzare dal suo input standard, se necessario. (Potrebbe anche scrivere direttamente sul terminale, se necessario.)
Puoi vederlo accadere correndo
some_command | strace -o less.trace -e open,read,write less
Spostati nell'input, esci less
e guarda il contenuto di less.trace
: lo vedrai aperto /dev/tty
e leggerai sia dal descrittore di file 0 sia da quello che è stato restituito quando è stato aperto /dev/tty
(probabilmente 3).
Questa è una pratica comune per i programmi che desiderano assicurarsi di leggere e scrivere sul terminale. Un esempio è SSH, ad esempio quando richiede una password o passphrase.
Come spiegato da schily , se /dev/tty
non può essere aperto, less
leggerà dal suo errore standard (descrittore di file 2). less
L 'uso di è /dev/tty
stato introdotto nella versione 177, rilasciata il 2 aprile 1991.
Se provi a correre cat /dev/tty | less
, come suggerito da Hagen von Eitzen , less
riuscirà ad aprirsi /dev/tty
ma non otterrà alcun input da esso fino a quando cat
non lo chiude. Quindi vedrai lo schermo vuoto e nient'altro finché non premi CtrlCper uccidere cat
(o ucciderlo in qualche altro modo); quindi less
mostrerà tutto ciò che hai digitato mentre cat
era in esecuzione e ti consentirà di controllarlo.
less
legge i dati da visualizzare da stdin e legge i comandi da tty. Sono cose diverse.