Como mencionó William Pursell , lesslee las pulsaciones de teclas del usuario desde el terminal. Se abre explícitamente /dev/tty, el terminal de control; eso le da un descriptor de archivo, separado de la entrada estándar, desde el cual puede leer la entrada interactiva del usuario. Puede leer simultáneamente datos para mostrar desde su entrada estándar si es necesario. (También podría escribir directamente en el terminal si es necesario).
Puede ver que esto suceda ejecutando
some_command | strace -o less.trace -e open,read,write less
Desplácese por la entrada, salga lessy mire el contenido de less.trace: lo verá abierto /dev/ttyy leerá tanto el descriptor de archivo 0 como el que se devolvió cuando se abrió /dev/tty(probablemente 3).
Esta es una práctica común para los programas que desean asegurarse de que leen y escriben en el terminal. Un ejemplo es SSH, por ejemplo , cuando solicita una contraseña o frase de contraseña.
Como se explicó por schily , si /dev/ttyno se puede abrir, lessleerá de su error estándar (descriptor de archivo 2). lessEl uso de /dev/ttyse introdujo en la versión 177, lanzada el 2 de abril de 1991.
Si intenta ejecutar cat /dev/tty | less, como se sugirió por Hagen von Eitzen , lesstendrá éxito en la apertura /dev/tty, pero no recibirá el aporte de él hasta catla cierra. Entonces verá la pantalla en blanco, y nada más hasta que presione CtrlCpara matar cat(o matarlo de alguna otra manera); luego lessmostrará lo que haya escrito mientras catestaba en ejecución y le permitirá controlarlo.
lesslee los datos para mostrar desde stdin y lee los comandos de tty. Son cosas diferentes.