将stderr和stdout重定向到同一文件的顺序

时间:2016-03-13 06:26:22

标签: linux bash ubuntu command-line-interface

当将stderr和stdout重定向到同一个文件时,为什么在将stdout重定向到文件后需要将stderr重定向到stdout? 它是如何工作的以及为什么不允许相反的方式?

4 个答案:

答案 0 :(得分:2)

2>&1的工作原理如下:

1 --->  output               1 --------> output
                   =====>          /
2 --->  error                2 ---/

不是这个:

1 --->  output                      -->  1 ----> output
                   =====>          /
2 --->  error                2 ---/

因此标准错误将是然后的标准输出,而不是 的标准输出。

有关更多信息和酷炫的ASCII艺术,请访问Illustrated redirection tutorial推荐的BashGuide

答案 1 :(得分:1)

在将stdout重定向到文件后,没有必要将stderr重定向到stdout,您可以使用2>&1将stderr重定向到stdout。或者1>&2将stdout重定向到stder。您还可以单独重定向1>2>(如果您选择)。例如,

echo a 2>/dev/null 1>&2

将在终端上不输出任何内容(但如果您使用a,则会获得echo a 2>/dev/null;因为它会将stderr重定向到/dev/null)。

答案 2 :(得分:1)

使用yourcmd > file 2>&1,标准输出会发送到file,然后stderr会重定向到标准输出的内容,即file

使用yourcmd 2>&1 > filestderr会发送到当前stdout所在的位置(很可能是您的终端),然后将当前stdout重定向到file

答案 3 :(得分:0)

回答您的问题我将Bash GuideGreycat引用Lhunath的重定向维基。

我建议您在本帖中的其他链接之前访问Bash FAQ 55,因为它会更快地回答您的问题,而其他链接将帮助您更全面地了解重定向。

  

重定向

     

重定向是shell在file descriptors上打开,关闭,复制和执行其他操作的机制。重定向是在运行命令本身之前的简单命令评估的最后一个或倒数第二个(取决于shell和命令)步骤。

     

链接