错误重定向背后发生了什么?

错误重定向背后发生了什么?

在阅读有关 Linux 的文章时,我得到了以下信息:

由于 stderr 与 stdout 不同,在上面的示例中,错误消息仍会在终端窗口上看到。

如果要将 stderr 重定向到单独的文件,可以使用 stderr 的文件描述符编号 (2)、大于号 (>),后跟要保存正在运行的命令写入 stderr 的所有内容的文件的名称:

$ do_something 2> error-file

可以使用特殊的简写符号将写入文件描述符 2 (stderr) 的任何内容放在与文件描述符 1 (stdout) 相同的位置:2>&1

$ do_something > all-output-file 2>&1

bash 允许使用更简单的语法来实现上述操作:

$ do_something >& all-output-file

do_something是一些命令。我真的不明白上面提到的所有 3 个命令到底发生了什么。我知道&用于将进程变为后台进程,但我不明白其中的逻辑。我对这种风格还不熟悉,有人能解释一下吗?

答案1

您可能会感到困惑,因为>&这与完全是两回事&

>&<&用于重定向以指向文件描述符 (fd)。上述情况重定向到 1 和 2,分别是 stdout 和 stderr。

>表示“重定向标准输出”

2>表示“重定向 fd 2 (stderr)”

>&2表示“将 stdout 重定向到 fd 2 (stderr)”。请注意,这与>2“将 stdout 重定向到名为 的文件2”有何不同 - 这就是 为何 如此&重要的原因。它表示下一个内容将是 fd,而不是文件名。

当然,正如您所说,如果 a&本身没有重定向符号,那么它的含义就完全不同了——“立即返回,在后台运行前面的命令”。

相关内容