Conforme 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, do qual ele pode ler a entrada interativa do usuário. Ele pode ler dados simultaneamente para exibir sua entrada padrão, se necessário. (Ele também pode gravar diretamente no terminal, se necessário.)
Você pode ver isso acontecendo executando
some_command | strace -o less.trace -e open,read,write less
Mova-se pela entrada, saia less
e observe o conteúdo de less.trace
: você a verá aberta /dev/tty
e lerá o descritor de arquivo 0 e o que foi retornado quando foi aberto /dev/tty
(provavelmente 3).
Essa é uma prática comum para programas que desejam garantir que estejam lendo e gravando no terminal. Um exemplo é o SSH, por exemplo , quando solicita uma senha ou frase secreta.
Conforme explicado por schily , se /dev/tty
não puder ser aberto, less
ele lerá seu erro padrão (descritor de arquivo 2). less
O uso 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
será bem-sucedido na abertura, /dev/tty
mas não receberá nenhuma entrada até que a cat
feche. Então você verá a tela em branco e nada mais até pressionar CtrlCpara matar cat
(ou matar de outra maneira); em seguida less
, mostrará o que você digitou enquanto cat
estava em execução e permitirá que você o controle.
less
lê os dados a serem exibidos a partir de stdin e lê comandos a partir do tty. São coisas diferentes.