首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >这个命令的意思是什么?

这个命令的意思是什么?
EN

Stack Overflow用户
提问于 2013-12-18 09:22:33
回答 1查看 2.2K关注 0票数 0

以下命令的含义是什么,特别是这一部分</dev/console

代码语言:javascript
运行
复制
exec >/dev/console 2>&1 </dev/console
EN

回答 1

Stack Overflow用户

发布于 2013-12-18 10:08:28

<f为给定的命令设置stdin:

代码语言:javascript
运行
复制
echo abc >f; nl <f

类似于(FIFO与文件差异除外):

代码语言:javascript
运行
复制
echo abc >f; cat f | nl

对于exec <f,从那时起所有stdin都将来自f文件,如解释的这里,而对于exec >f,从现在起所有的标准输出都将转到f

关于/dev/console,做:

代码语言:javascript
运行
复制
sudo bash 'echo a > /dev/console'

a输出到当前tty,不依赖于重定向。因此,要想看到这种效果,您需要使用文本tty (Ctrl+Alt+F2、F3等)。

使用/dev/tty代替/dev/console可能是不同的,但根据这个答案的不同。在Ubuntu上,它们是不同的,使用/dev/tty更好,因为它也适用于xterm窗口。在Ubuntu上,/dev/tty也不需要sudo来使用,所以我将在下面的示例中使用它。

要在工作中看到这一点,请创建一个脚本:

代码语言:javascript
运行
复制
echo '
echo a
echo b >/dev/tty
' > s

并做:

代码语言:javascript
运行
复制
sudo bash s >/dev/null

您将在tty上看到b,因为a先到标准输出,然后再到null

>/dev/null也是如此,但是脚本的stdin也是如此。

因此,最后将所有内容组合在一起意味着,即使我们将该程序称为:

代码语言:javascript
运行
复制
echo a | ./a.sh >/dev/null

从那时起,stdout和stderr将转到tty,stdin将来自tty,如果没有该命令,就不会发生这种情况(stdin来自管道,stdout将转到/dev/null)。

出于可移植性的原因,我不建议您依赖设备文件,因为我认为POSIX没有指定它们。

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

https://stackoverflow.com/questions/20654025

复制
相关文章

相似问题

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