Tty

命令 tty 的輸出和文件 /dev/tty 是否都指向目前 bash 程序的控制終端?

  • May 31, 2018
  1. man tty

tty - 列印連接到標準輸入的終端的文件名

$ tty
/dev/pts/2
  1. 來自 APUE:

歷史上,大多數版本的 UNIX 系統中控制終端的名稱都是/dev/tty. POSIX.1 提供了一個執行時函式,我們可以呼叫它來確定控制終端的名稱。

#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

所以我想知道命令的輸出tty和文件是否/dev/tty 都引用了目前 bash 程序的控制終端?

如果是,為什麼命令tty輸出一個偽終端從文件/dev/pts/2,它不同於/dev/tty

由於終端仿真器lxterminal和其中執行的 bash shell 使用偽終端對,偽終端從站不是/dev/pts/2bash shell 的控制終端嗎?

/dev/tty並且/dev/pts/2不是彼此的符號連結,所以它們是不同的文件嗎?

謝謝。

後續文章我目前的控制終端和/dev/tty之間有什麼關係?

命令tty(1) 返回連接到標準輸入的終端名稱。這可能是控制終端,也可能不是。該程序甚至可能有一個控制終端,但該終端必須連接到標準輸入並不是一成不變的。

(1)的 POSIX手冊頁tty

tty 實用程序應將作為標準輸入打開的終端的名稱寫入標準輸出。使用的名稱應等同於將由 ttyname()POSIX.1-2008 的系統介面卷中定義的函式返回的字元串。

自己試試吧;跑

< /dev/null sh -c 'tty; sleep 10; echo "Done."'

並在看到“not a tty”寫出的消息後按 Ctrl+C,tty因為標準輸入不是(偽)終端。

另一方面,/dev/tty它始終是程序的控制終端的同義詞,前提是該程序實際上一個控制終端。

引用自:https://unix.stackexchange.com/questions/446166