Jako většina z vás už mnohokrát, je vhodné prohlížet dlouhý text pomocí less :
some_command | less
Nyní je jeho stdin připojen k potrubí (FIFO). Jak může stále číst příkazy jako up/down/quit?
Přijatá odpověď:
Jak zmínil William Pursell, less čte stisknuté klávesy uživatele z terminálu. Explicitně otevře /dev/tty , ovládací terminál; to mu dává deskriptor souboru, oddělený od standardního vstupu, ze kterého může číst interaktivní vstup uživatele. Může současně číst data k zobrazení ze svého standardního vstupu v případě potřeby. (Mohlo by to také zapsat v případě potřeby přímo do terminálu.)
Můžete to vidět spuštěním
some_command | strace -o less.trace -e open,read,write less
Pohybujte se po vstupu, ukončujte less a podívejte se na obsah less.trace :uvidíte jej otevřené /dev/tty a číst z obou deskriptorů souboru 0 a podle toho, který byl vrácen při otevření /dev/tty (pravděpodobně 3).
To je běžná praxe pro programy, které chtějí zajistit, že čtou z terminálu a zapisují do něj. Jedním z příkladů je SSH, např. když požádá o heslo nebo přístupovou frázi.
Jak vysvětlil schily, pokud /dev/tty nelze otevřít, less bude číst ze své standardní chyby (deskriptor souboru 2). less použití /dev/tty byl představen ve verzi 177, vydané 2. dubna 1991.
Pokud zkusíte spustit cat /dev/tty | less , jak navrhuje Hagen von Eitzen, less podaří otevřít /dev/tty ale nezíská z něj žádný vstup, dokud cat zavře to. Takže dokud nestisknete Ctrl, uvidíte prázdnou obrazovku a nic jiného C zabít cat (nebo ho zabít jiným způsobem); pak less zobrazí vše, co jste napsali při cat byl spuštěn a umožňuje vám jej ovládat.