Bash 重定向:附加到文件描述符 (2>>&1)

mar*_*afm 4 bash io-redirection file-descriptors

我正在尝试将命令(stdout 和 stderr)的输出附加到现有文件中。

我想要做的是这样的:

command >>file 2>>&1
Run Code Online (Sandbox Code Playgroud)

问题是会2>>&1引发错误,但>>file 2>>file不会。

所以,我想我误解了重定向的工作原理,或者什么是文件描述符以及其中保存了哪些信息。

总结一下,下面两个命令有什么区别,为什么第一个不起作用,而第二个起作用?

command >>file 2>>&1      #not working
command >>file 2>>file    #working
Run Code Online (Sandbox Code Playgroud)

谢谢

gle*_*man 9

您想要做的是设置文件描述符 1 (stdout) 以附加到文件,然后重定向 fd 2 (stderr) 以简单地执行 fd 1 正在执行的操作。

command >>file 2>&1
Run Code Online (Sandbox Code Playgroud)

2>>&1只是因为>>&不是重定向运算符,您会收到错误消息。

阅读bash 手册中的重定向,特别是第 3.6.5 和 3.6.8 节


m0d*_*lar 8

由于这是用 标记的bash,因此您可以使用&>>重定向(附加)标准输出和标准错误。

command &>>file