-
Depuis
man tty
tty - affiche le nom de fichier du terminal connecté à l'entrée standard
$ tty /dev/pts/2
-
De l'APUE :
Historiquement, le nom du terminal de contrôle dans la plupart des versions du système UNIX était
/dev/tty
. POSIX.1 fournit une fonction
d'exécution
que nous pouvons appeler pour déterminer le nom du terminal
de contrôle.#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
Je me demandais donc si la sortie de la commande tty
et le fichier /dev/tty
font tous deux référence au terminal de contrôle du processus bash actuel ?
Si oui, pourquoi la commande tty
sortie un fichier esclave pseudoterminal /dev/pts/2
, qui est différent de /dev/tty
?
Depuis l'émulateur de terminal lxterminal
et le shell bash qui s'y exécute utilise une paire de pseudoterminaux, n'est pas l'esclave pseudoterminal /dev/pts/2
le terminal de contrôle du shell bash ?
/dev/tty
et /dev/pts/2
ne sont-ils pas des liens symboliques les uns avec les autres ? Sont-ils donc des fichiers différents ?
Merci.
Un message de suivi sur les relations entre mon terminal de contrôle actuel et `/dev/tty` ?
Réponse acceptée :
La commande tty
(1) renvoie le nom du terminal connecté à l'entrée standard. Il peut s'agir du terminal de contrôle ou non. Le processus peut même avoir un terminal de contrôle, mais il n'est pas écrit dans la pierre que ce terminal doit être connecté à l'entrée standard.
À partir de la page de manuel POSIX pour tty
(1):
L'utilitaire tty doit écrire sur la sortie standard le nom du terminal qui est ouvert en entrée standard. Le nom utilisé doit être équivalent à la chaîne qui serait renvoyée par
ttyname()
fonction définie dans le volume System Interfaces de POSIX.1‐2008.
Essayez-le par vous-même; courir
< /dev/null sh -c 'tty; sleep 10; echo "Done."'
et appuyez sur Ctrl+C après avoir vu le message "not a tty" écrit par tty
car l'entrée standard n'est pas un (pseudo-)terminal.
D'autre part, /dev/tty
est toujours synonyme de terminal de contrôle d'un processus, à condition que le processus ait un terminal de contrôle.