Como la mayoría de ustedes ha hecho muchas veces, es conveniente ver texto largo usando less :
some_command | less
Ahora su stdin está conectado a una tubería (FIFO). ¿Cómo puede seguir leyendo comandos como arriba/abajo/salir?
Respuesta aceptada:
Como menciona William Pursell, less lee las pulsaciones de teclas del usuario desde el terminal. 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 a la terminal si es necesario).
Puedes ver que esto suceda ejecutando
some_command | strace -o less.trace -e open,read,write less
Muévase por la entrada, salga less y mira el contenido de less.trace :lo verás abierto /dev/tty , y lea tanto el descriptor de archivo 0 como el que se devolvió cuando abrió /dev/tty (probablemente 3).
Esta es una práctica común para los programas que desean asegurarse de que están leyendo y escribiendo en la terminal. Un ejemplo es SSH, p. ej. cuando solicita una contraseña o frase de contraseña.
Como explica 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 sugiere Hagen von Eitzen, less logrará abrir /dev/tty pero no obtendrá ninguna entrada hasta que cat lo cierra Entonces verá la pantalla en blanco y nada más hasta que presione Ctrl C matar a cat (o matarlo de alguna otra manera); entonces less mostrará lo que hayas escrito mientras cat se estaba ejecutando y te permite controlarlo.