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.