Echo un vistazo al código de la utilidad 'menos', específicamente cómo se ingresa el teclado. Curiosamente, en la línea 80 de ttyin.c, establece el descriptor de archivo a leer:Less recibe entrada de teclado de stderr?
/*
* Try /dev/tty.
* If that doesn't work, use file descriptor 2,
* which in Unix is usually attached to the screen,
* but also usually lets you read from the keyboard.
*/
#if OS2
/* The __open() system call translates "/dev/tty" to "con". */
tty = __open("/dev/tty", OPEN_READ);
#else
tty = open("/dev/tty", OPEN_READ);
#endif
if (tty < 0)
tty = 2;
no es el archivo descriptor de 2 stderr? Si es así, ¿WTH? Pensé que la entrada del teclado se envió a través de stdin.
Curiosamente, incluso si lo hace ls -l * | less
, después de que el archivo termina de cargar, aún puede utilizar el teclado para desplazarse hacia arriba y hacia abajo, pero si lo hace ls -l * | vi
, a continuación, VI gritarte porque no lee de la entrada estándar . ¿Cúal es la gran idea? ¿Cómo terminé en esta nueva tierra extraña donde stderr es tanto una manera de informar errores a la pantalla y leer desde el teclado? No creo estar en Kansas nunca más ...
Por cierto, si escribe 'ls -l * | vim -', vim realizará una magia similar. – ephemient