有时标准输入(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”组有一个集体名称,还是它们都是单独提及的?
发布于 2018-04-02 01:28:50
这些是重定向:
因此,你可以说“是一种重定向”,而不是“不是一个tty”。将文件重定向到命令:
command < filename 在这里,文档-这种类型的重定向指示shell从当前源读取输入,直到看到一行只包含单词(没有尾随空格):
<<[-]word
here-document
delimiter将commandA的标准重定向到commandB:
commandA | commandB发布于 2018-04-01 22:11:18
它可以是文件(甚至是设备文件或FIFO),也可以是管道。
这种区别是很重要的,因为您可以在控制终端上操作的方式比普通打开的文件更多。有时这是有利的,有时是不利的。
例如,不能重定向终端。您可以重定向stdin,但这不会影响tty的读取。程序经常从tty读取密码。这可能很好,因为它不会干扰您希望命令从stdin读取的数据,但是如果您想要对命令进行脚本化(并且需要expect或socat来处理终端),这可能会很糟糕。
但是,一个进程即使没有连接到stdin,也仍然有一个控制的tty。
https://unix.stackexchange.com/questions/434909
复制相似问题