标准输入:不是 tty

标准输入:不是 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”不是终端时,它是什么? “not a tty”组是否有一个集体名称,或者它们只是单独引用?

答案1

它可以是一个文件(甚至是设备文件或 FIFO)或管道。

区别很重要,因为与常规打开的文件相比,您可以通过更多方式在控制终端上进行操作。有时这是有利的,有时则是不利的。

例如,您无法重定向终端。您可以重定向 stdin,但这不会影响从 tty 的读取。程序经常从 tty 读取密码。这可能很好,因为它不会干扰您希望命令从标准输入读取的数据,但如果您想编写命令脚本(并且需要例如expectsocat来处理终端),这可能会很糟糕。

但是,即使进程没有连接到标准输入,它仍然有一个控制 tty。

答案2

那些是重定向:

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

command < filename    

Here Documents - 这种类型的重定向指示 shell 从当前源读取输入,直到看到仅包含单词(没有尾随空格)的行:

<<[-]word
        here-document
delimiter

将 commandA 的 stdout 重定向到 commandB:

commandA | commandB

相关内容