Terminal

標準輸入:不是 tty

  • April 2, 2018

有時標準輸入(stdin)是一個終端:

$ tty
/dev/pts/0

有時不是:

$ echo hello | tty
not a tty

$ tty < /dev/null
not a tty

$ tty << eof
> hello
> eof
not a tty

當“stdin”不是終端時,它是什麼?那個“不是 tty”組有一個集體名稱,還是都只是單獨提及?

這些是重定向

因此,您可以說“是重定向”,而不是“不是 tty”。將文件重定向到命令中:

command < filename    

Here Documents - 這種類型的重定向指示 shell 從目前源讀取輸入,直到看到只包含單詞(沒有尾隨空格)的行:

<<[-]word
       here-document
delimiter

將 commandA 的標準輸出重定向到 commandB:

commandA | commandB

它可以是文件(甚至是設備文件或 FIFO)或管道。

區別很重要,因為您可以在控制終端上進行操作,而不是正常打開的文件。有時這是有利的,有時是不利的。

例如,您不能重定向終端。您可以重定向標準輸入,但這不會影響從 tty 讀取。程序經常從 tty 讀取密碼。這可能很好,因為它不會干擾您希望命令從標準輸入讀取的數據,但如果您想編寫命令腳本(並且需要例如expectsocat用於處理終端),它可能會很糟糕。

但是即使程序沒有連接到標準輸入,它仍然有一個控制 tty。

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