Tty命令
命令 tty
的輸出和文件 /dev/tty
是否都指向目前 bash 程序的控制終端?
- 從
man tty
tty - 列印連接到標準輸入的終端的文件名
$ tty /dev/pts/2
- 來自 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/2
bash shell 的控制終端嗎?
/dev/tty
並且/dev/pts/2
不是彼此的符號連結,所以它們是不同的文件嗎?謝謝。
命令
tty
(1) 返回連接到標準輸入的終端名稱。這可能是控制終端,也可能不是。該程序甚至可能有一個控制終端,但該終端必須連接到標準輸入並不是一成不變的。tty 實用程序應將作為標準輸入打開的終端的名稱寫入標準輸出。使用的名稱應等同於將由
ttyname()
POSIX.1-2008 的系統介面卷中定義的函式返回的字元串。自己試試吧;跑
< /dev/null sh -c 'tty; sleep 10; echo "Done."'
並在看到“not a tty”寫出的消息後按 Ctrl+C,
tty
因為標準輸入不是(偽)終端。另一方面,
/dev/tty
它始終是程序的控制終端的同義詞,前提是該程序實際上有一個控制終端。