Ich schaue mir den Code für das Dienstprogramm 'less' an, speziell wie es Tastatureingabe erhält. Interessanterweise auf der Leitung 80 von ttyin.c, setzt er der Dateideskriptor zum Lesen:Less bekommt Tastatureingabe von 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;
Ist das nicht Descriptor 2 stderr-Datei? Wenn ja, WTH ?! Ich dachte, dass die Tastatureingabe über die Standardeingabe gesendet wurde.
Interessanterweise, auch wenn Sie ls -l * | less
tun, nachdem die Datei geladen wurde, können Sie die Tastatur verwenden, um nach oben und nach unten, aber wenn Sie ls -l * | vi
tun, dann wird vi an Sie schreien, weil es nicht von stdin gelesen hat . Was ist die große Idee? Wie bin ich in diesem fremden neuen Land gelandet, in dem stderr sowohl Fehler auf dem Bildschirm anzeigt als auch von der Tastatur liest? Ich glaube nicht, dass ich in Kansas bin ...
BTW, wenn Sie 'ls -l * schreiben | vim -', vim wird ähnliche Magie ausführen. – ephemient