GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Verweisen die Ausgabe des Befehls „tty“ und die Datei „/dev/tty“ beide auf das steuernde Terminal des aktuellen Bash-Prozesses?

  1. Von man tty

    tty – gibt den Dateinamen des an die Standardeingabe angeschlossenen Terminals aus

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


Linux
  1. Befehlsausgabeumleitung auf Datei und Terminal

  2. Wie kann ich das aktuelle Datum und die aktuelle Uhrzeit im Terminal abrufen und einen benutzerdefinierten Befehl im Terminal dafür festlegen?

  3. Speichern Sie die Ausgabe von date und watch in einer Datei

  4. Verzeichnisse rekursiv durchlaufen und einen Befehl für eine Datei im Verzeichnis ausführen

  5. So listen Sie die offenen Dateideskriptoren (und die Dateien, auf die sie sich beziehen) in meiner aktuellen Bash-Sitzung auf

So erfassen Sie Terminalsitzungen und geben sie mit dem Linux-Skriptbefehl aus

So speichern Sie die Ausgabe des Befehls in einer Datei mit dem Linux-Terminal

Text auf der Terminalausgabe suchen?

Speichern Sie die Ausgabe eines Befehls vom Debian-Terminal in einer Datei

Wie hängt man die Ausgabe an eine Datei an?

Warum muss Linux sowohl `/dev/cdrom` als auch `/media/cdrom` haben?