我看到了一些将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?
答案 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)。