这个命令的含义是什么?

时间:2013-12-18 09:22:34

标签: linux bash

以下命令的含义是什么,尤其是此部分</dev/console

exec >/dev/console 2>&1 </dev/console

1 个答案:

答案 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没有指定它们。