Zombo Asked: 2018-04-02 12:59:34 +0800 CST2018-04-02 12:59:34 +0800 CST 2018-04-02 12:59:34 +0800 CST 标准输入:不是 tty 772 有时标准输入(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”组是否有一个集体名称,或者他们都只是单独提及? terminal pipe 2 个回答 Voted Hauke Laging 2018-04-02T14:11:18+08:002018-04-02T14:11:18+08:00 它可以是文件(甚至是设备文件或 FIFO)或管道。 区别很重要,因为您可以在控制终端上进行操作,而不是常规打开的文件。有时这是有利的,有时是不利的。 例如,您不能重定向终端。您可以重定向标准输入,但这不会影响从 tty 读取。程序经常从 tty 读取密码。这可能很好,因为它不会干扰您希望命令从标准输入读取的数据,但如果您想编写命令脚本(并且需要例如expect或socat用于处理终端),它可能会很糟糕。 但是即使进程没有连接到标准输入,它仍然有一个控制 tty。 Best Answer Zombo 2018-04-02T17:28:50+08:002018-04-02T17:28:50+08:00 这些是重定向: http://ss64.com/bash/syntax-redirection.html http://wikipedia.org/wiki/Redirection_(计算) 因此,您可以说“是重定向”,而不是“不是 tty”。将文件重定向到命令中: command < filename Here Documents - 这种类型的重定向指示 shell 从当前源读取输入,直到看到只包含单词(没有尾随空格)的行: <<[-]word here-document delimiter 将 commandA 的标准输出重定向到 commandB: commandA | commandB
它可以是文件(甚至是设备文件或 FIFO)或管道。
区别很重要,因为您可以在控制终端上进行操作,而不是常规打开的文件。有时这是有利的,有时是不利的。
例如,您不能重定向终端。您可以重定向标准输入,但这不会影响从 tty 读取。程序经常从 tty 读取密码。这可能很好,因为它不会干扰您希望命令从标准输入读取的数据,但如果您想编写命令脚本(并且需要例如
expect
或socat
用于处理终端),它可能会很糟糕。但是即使进程没有连接到标准输入,它仍然有一个控制 tty。
这些是重定向:
因此,您可以说“是重定向”,而不是“不是 tty”。将文件重定向到命令中:
Here Documents - 这种类型的重定向指示 shell 从当前源读取输入,直到看到只包含单词(没有尾随空格)的行:
将 commandA 的标准输出重定向到 commandB: