首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >标准输入:不是tty

标准输入:不是tty
EN

Unix & Linux用户
提问于 2018-04-01 20:59:34
回答 2查看 7K关注 0票数 2

有时标准输入(stdin)是一个终端:

代码语言:javascript
复制
$ tty
/dev/pts/0

有时不是:

代码语言:javascript
复制
$ echo hello | tty
not a tty

$ tty < /dev/null
not a tty

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

当"stdin“不是终端时,它是什么?是“不是一个tty”组有一个集体名称,还是它们都是单独提及的?

EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2018-04-02 01:28:50

这些是重定向

  • http://ss64.com/bash/syntax-redirection.html
  • http://wikipedia.org/wiki/Redirection_(计算)

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

代码语言:javascript
复制
command < filename    

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

代码语言:javascript
复制
<<[-]word
        here-document
delimiter

将commandA的标准重定向到commandB:

代码语言:javascript
复制
commandA | commandB
票数 2
EN

Unix & Linux用户

发布于 2018-04-01 22:11:18

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

这种区别是很重要的,因为您可以在控制终端上操作的方式比普通打开的文件更多。有时这是有利的,有时是不利的。

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

但是,一个进程即使没有连接到stdin,也仍然有一个控制的tty。

票数 3
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/434909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档