-
Od
man tty
tty – tisk názvu souboru terminálu připojeného ke standardnímu vstupu
$ tty /dev/pts/2
-
Z APUE:
Historicky byl název řídicího terminálu ve většině verzí systému UNIX
/dev/tty
. POSIX.1 poskytuje
runtime
funkci, kterou můžeme zavolat, abychom určili název řídícího
terminálu.#include <stdio.h> char *ctermid(char *ptr);
$ ls -la /dev/tty crw-rw-rw- 1 root tty 5, 0 May 26 00:16 /dev/tty
Tak mě zajímalo, jestli výstup příkazu tty
a soubor /dev/tty
oba odkazují na řídicí terminál aktuálního bash procesu?
Pokud ano, proč příkaz tty
výstup pseudoterminálního slave souboru /dev/pts/2
, což se liší od /dev/tty
?
Protože emulátor terminálu lxterminal
a bash shell v něm běžící používá pseudoterminální pár, není to pseudoterminální slave /dev/pts/2
ovládací terminál bash shellu?
/dev/tty
a /dev/pts/2
nejsou symbolické odkazy na sebe, takže jsou to různé soubory?
Děkuji.
Následný příspěvek, jaké jsou vztahy mezi mým současným ovládacím terminálem a `/dev/tty`?
Přijatá odpověď:
Příkaz tty
(1) vrací název terminálu připojeného ke standardnímu vstupu. Může to být ovládací terminál, nebo nemusí. Proces může mít i ovládací terminál, ale není v kameni psáno, že tento terminál musí být připojen ke standardnímu vstupu.
Z manuálové stránky POSIX pro tty
(1):
Obslužný program tty zapíše na standardní výstup název terminálu, který je otevřený jako standardní vstup. Použitý název musí být ekvivalentní řetězci, který by vrátila funkce
ttyname()
funkce definovaná ve svazku Systémová rozhraní POSIX.1‐2008.
Zkuste to sami; spustit
< /dev/null sh -c 'tty; sleep 10; echo "Done."'
a stiskněte Ctrl+C poté, co uvidíte zprávu „not a tty“ napsanou tty
protože standardní vstup to není (pseudo-)terminál.
Na druhé straně /dev/tty
je vždy synonymem pro řídící terminál procesu za předpokladu, že proces skutečně má ovládací terminál.