Terminal
標準輸入:不是 tty
有時標準輸入(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 讀取密碼。這可能很好,因為它不會干擾您希望命令從標準輸入讀取的數據,但如果您想編寫命令腳本(並且需要例如
expect
或socat
用於處理終端),它可能會很糟糕。但是即使程序沒有連接到標準輸入,它仍然有一個控制 tty。