以下命令的含义是什么,特别是这一部分</dev/console
exec >/dev/console 2>&1 </dev/console发布于 2013-12-18 10:08:28
<f为给定的命令设置stdin:
echo abc >f; nl <f类似于(FIFO与文件差异除外):
echo abc >f; cat f | nl对于exec <f,从那时起所有stdin都将来自f文件,如解释的这里,而对于exec >f,从现在起所有的标准输出都将转到f。
关于/dev/console,做:
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来使用,所以我将在下面的示例中使用它。
要在工作中看到这一点,请创建一个脚本:
echo '
echo a
echo b >/dev/tty
' > s并做:
sudo bash s >/dev/null您将在tty上看到b,因为a先到标准输出,然后再到null。
>/dev/null也是如此,但是脚本的stdin也是如此。
因此,最后将所有内容组合在一起意味着,即使我们将该程序称为:
echo a | ./a.sh >/dev/null从那时起,stdout和stderr将转到tty,stdin将来自tty,如果没有该命令,就不会发生这种情况(stdin来自管道,stdout将转到/dev/null)。
出于可移植性的原因,我不建议您依赖设备文件,因为我认为POSIX没有指定它们。
https://stackoverflow.com/questions/20654025
复制相似问题