-
Da
man tty
tty – stampa il nome del file del terminale collegato allo standard input
$ tty /dev/pts/2
-
Da APUE:
Storicamente, il nome del terminale di controllo nella maggior parte delle versioni del sistema UNIX era
/dev/tty
. POSIX.1 fornisce una funzione
runtime
che possiamo chiamare per determinare il nome del terminale di controllo
.#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
Quindi mi chiedevo se l'output del comando tty
e il file /dev/tty
entrambi si riferiscono al terminale di controllo dell'attuale processo bash?
Se sì, perché il comando tty
genera un file slave pseudoterminale /dev/pts/2
, che è diverso da /dev/tty
?
Dal momento che l'emulatore di terminale lxterminal
e la shell bash in esecuzione usa una coppia pseudoterminale, non è lo slave pseudoterminale /dev/pts/2
il terminale di controllo della shell bash?
/dev/tty
e /dev/pts/2
non sono collegamenti simbolici tra loro, quindi sono file diversi?
Grazie.
Un post successivo quali sono le relazioni tra il mio attuale terminale di controllo e `/dev/tty`?
Risposta accettata:
Il comando tty
(1) restituisce il nome del terminale collegato allo standard input. Questo potrebbe essere il terminale di controllo o potrebbe non esserlo. Il processo può anche avere un terminale di controllo, ma non è scritto sulla pietra che quel terminale deve essere collegato all'ingresso standard.
Dalla pagina di manuale di POSIX per tty
(1):
L'utilità tty scrive sullo standard output il nome del terminale aperto come standard input. Il nome utilizzato deve essere equivalente alla stringa che verrebbe restituita da ttyname()
funzione definita nel volume System Interfaces di POSIX.1‐2008.
Provalo tu stesso; corri
< /dev/null sh -c 'tty; sleep 10; echo "Done."'
e premi Ctrl+C dopo aver visto il messaggio "not a tty" scritto da tty
perché lo standard input non è un (pseudo-)terminale.
D'altra parte, /dev/tty
è sempre un sinonimo per il terminale di controllo di un processo, a condizione che il processo effettivamente abbia un terminale di controllo.