将std错误重定向到文件时的顺序为2>& 1

时间:2015-05-12 10:41:19

标签: linux bash stdout

我看到了一些将std输出重定向到文件的不同格式:

a.  command 1&2>output.txt
b.  command >output.txt 2>&1
c.  command 2>&1>output.txt  
d.  command &>output.txt

这些之间有什么区别吗? 如果2>&1放在末尾(b),它如何重定向第一个命令的stderr?

1 个答案:

答案 0 :(得分:2)

是。订单很重要。 >可能会提出指向和指针/引用的想法,而#34;重定向"这个词也是如此,但fd重定向更像是赋值。 也就是说,如果你这样做

exec 2>&1 1>output.txt

它会"分配"当前"价值" (文件描述符1打开的实际文件)到文件描述符2,然后打开output.txt并将其分配给文件描述符1

它不会做的是将&2(读作"文件描述符")指向&1。它无法访问&2查询&1。 文件描述符只与实际文件相关联,从不与另一个文件描述符相关联。 2>&1&1下现在打开的文件与&2相关联。它不会将&2重定向到&1,因为写入&2会使其写入&1与此相关联的内容。稍后可以使用与&1重定向时关联的文件不同的文件重新打开2>&1,但这不会影响&2写入的内容。

如果您想知道系统调用级别如何公开此功能,请查看dup2(2)