GNU/Linux >> Tutoriels Linux >  >> Linux

La sortie de la commande `tty` et le fichier `/dev/tty` font-ils tous deux référence au terminal de contrôle du processus Bash actuel ?

  1. Depuis man tty

    tty - affiche le nom de fichier du terminal connecté à l'entrée standard

    $ tty
    /dev/pts/2
    
  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.


Linux
  1. Lire et écrire des données de n'importe où avec la redirection dans le terminal Linux

  2. Comment capturer les sessions de terminal et la sortie avec la commande de script Linux

  3. Quelles relations existe-t-il entre le terminal de contrôle actuel et `/dev/tty` ?

  4. Redirection Io et commande principale ?

  5. Comment répertorier les descripteurs de fichiers ouverts (et les fichiers auxquels ils se réfèrent) dans la session Bash en cours ?

Comment enregistrer la sortie de la commande dans un fichier à l'aide du terminal Linux

Rechercher du texte sur la sortie du terminal ?

Enregistrer la sortie d'une commande du terminal Debian dans un fichier

Stocker la sortie de la commande date et watch dans un fichier

Boucler récursivement dans les répertoires et exécuter une commande sur un fichier du répertoire

Pourquoi Linux a-t-il besoin d'avoir à la fois `/dev/cdrom` et `/media/cdrom` ?