以下命令的含义是什么,尤其是此部分</dev/console
exec >/dev/console 2>&1 </dev/console
答案 0 :(得分:1)
<f
为给定命令设置stdin:
echo abc >f; nl <f
与:
相同echo abc >f; cat f | nl
使用exec <f
,从该点开始的所有标准输入都将来自文件f
,如here所述,而exec >f
从此时开始的所有标准输出将转到f
{1}}。
关于/dev/console
,正在执行:
sudo bash 'echo a > /dev/console'
将a
输出到当前tty,与重定向无关。因此,要看到这个工作,你需要使用文本tty(在Ubuntu上按Ctrl + Alt + F2,F3等)。
根据this answer,使用/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
,但适用于脚本的标准输入。
因此,最终将所有内容放在一起意味着即使我们将程序称为:
echo a | ./a.sh >/dev/null
从那时起stdout和stderr将转到tty并且stdin将来自tty,如果没有该命令就不会发生(stdin将来自管道,而stdout将转到/dev/null
)。
出于便携性的原因,我不建议您依赖设备文件,因为我认为POSIX没有指定它们。