我看到一些不同的格式将std输出redirect到一个文件:
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),它如何redirect第一个命令的stderr?
是。 订单很重要。 >
可以提出指向和指针/引用的概念,“重定向”这个词也是如此,但是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
重定向时关联的文件不同的文件,但这不会影响写入的内容。
如果想知道在系统调用级别如何显示此功能,请查看dup2(2) 。