-
Von
man tty
tty – gibt den Dateinamen des an die Standardeingabe angeschlossenen Terminals aus
$ tty /dev/pts/2
-
Von APUE:
In der Vergangenheit war der Name des steuernden Terminals in den meisten Versionen des UNIX-Systems
/dev/tty
. POSIX.1 stellt eine
Laufzeitfunktion
bereit, die wir aufrufen können, um den Namen des steuernden
Terminals zu bestimmen.#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
Also habe ich mich gefragt, ob die Ausgabe des Befehls tty
und die Datei /dev/tty
beziehen sich beide auf das steuernde Terminal des aktuellen Bash-Prozesses?
Wenn ja, warum funktioniert der Befehl tty
Ausgabe einer Pseudoterminal-Slave-Datei /dev/pts/2
, das sich von /dev/tty
unterscheidet ?
Da der Terminalemulator lxterminal
und die darin laufende Bash-Shell ein Pseudoterminal-Paar verwendet, ist nicht der Pseudoterminal-Slave /dev/pts/2
das steuernde Terminal der Bash-Shell?
/dev/tty
und /dev/pts/2
sind keine symbolischen Links zueinander, also sind es unterschiedliche Dateien?
Danke.
Ein Folgebeitrag, welche Beziehungen bestehen zwischen meinem aktuellen Kontrollterminal und `/dev/tty`?
Akzeptierte Antwort:
Der Befehl tty
(1) gibt den Namen des mit der Standardeingabe verbundenen Terminals zurück. Dies kann das steuernde Terminal sein oder auch nicht. Der Prozess kann sogar ein steuerndes Terminal haben, aber es ist nicht in Stein gemeißelt, dass dieses Terminal mit der Standardeingabe verbunden sein muss.
Aus der POSIX-Handbuchseite für tty
(1):
Das Dienstprogramm tty schreibt den Namen des Terminals, das als Standardeingabe geöffnet ist, in die Standardausgabe. Der verwendete Name muss der Zeichenfolge entsprechen, die von ttyname()
zurückgegeben würde Funktion definiert im Band System Interfaces von POSIX.1-2008.
Probieren Sie es selbst aus; laufen
< /dev/null sh -c 'tty; sleep 10; echo "Done."'
und drücken Sie Strg+C, nachdem Sie die Nachricht „not a tty“ gesehen haben, die von tty
geschrieben wurde weil die Standardeingabe kein (Pseudo-)Terminal ist.
Andererseits /dev/tty
ist immer ein Synonym für das steuernde Terminal eines Prozesses, sofern der Prozess tatsächlich hat ein steuerndes Terminal.