Como mencionó William Pursell , less
lee 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 less
y mire el contenido de less.trace
: lo verá abierto /dev/tty
y 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/tty
no se puede abrir, less
leerá de su error estándar (descriptor de archivo 2). less
El uso de /dev/tty
se 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 , less
tendrá éxito en la apertura /dev/tty
, pero no recibirá el aporte de él hasta cat
la cierra. Entonces verá la pantalla en blanco, y nada más hasta que presione CtrlCpara matar cat
(o matarlo de alguna otra manera); luego less
mostrará lo que haya escrito mientras cat
estaba en ejecución y le permitirá controlarlo.
less
lee los datos para mostrar desde stdin y lee los comandos de tty. Son cosas diferentes.