Como mencionado por William Pursell , less
lê as teclas digitadas pelo usuário no terminal. Ele abre explicitamente /dev/tty
, o terminal de controle; que fornece um descritor de arquivo, separado da entrada padrão, a partir do qual ele pode ler a entrada interativa do usuário. Ele pode ler dados simultaneamente para exibir a partir de sua entrada padrão, se necessário. (Também poderia escrever diretamente no terminal, se necessário.)
Você pode ver isso acontecer executando
some_command | strace -o less.trace -e open,read,write less
Movimente-se pela entrada, saia em less
e observe o conteúdo de less.trace
: você a verá aberta /dev/tty
e leia o descritor de arquivo 0 e o que foi retornado quando abriu /dev/tty
(provável 3).
Essa é uma prática comum para programas que desejam garantir a leitura e a gravação no terminal. Um exemplo é o SSH, por exemplo. quando ele solicita uma senha ou frase secreta.
Como explicado por schily , se /dev/tty
não puder ser aberto, less
lerá seu erro padrão (descritor de arquivo 2). O uso de less
de /dev/tty
foi introduzido na versão 177, lançada em 2 de abril de 1991.
Se você tentar executar cat /dev/tty | less
, como sugerido por Hagen von Eitzen , less
conseguirá abrir /dev/tty
, mas não obterá nenhuma entrada até que cat
feche. Assim, você verá a tela em branco e nada mais até pressionar Ctrl C para matar cat
(ou eliminá-lo de alguma outra forma); então less
mostrará o que você digitou enquanto cat
estava em execução e permite que você o controle.