![Bash 重定向:附加到文件描述符 (2>>&1)](https://linux22.com/image/120865/Bash%20%E9%87%8D%E5%AE%9A%E5%90%91%EF%BC%9A%E9%99%84%E5%8A%A0%E5%88%B0%E6%96%87%E4%BB%B6%E6%8F%8F%E8%BF%B0%E7%AC%A6%20(2%3E%3E%261).png)
我正在尝试将命令的输出(stdout 和 stderr)附加到现有文件。
我想做的是这样的:
command >>file 2>>&1
问题是会2>>&1
抛出错误,但>>file 2>>file
不会。
所以,我认为我误解了重定向的工作原理,或者什么是文件描述符以及其中保存的信息。
总结一下,以下两个命令有什么区别,为什么第一个命令不起作用,但第二个命令起作用?
command >>file 2>>&1 #not working
command >>file 2>>file #working
谢谢
答案1
您想要做的是将文件描述符 1 (stdout) 设置为附加到文件,然后重定向 fd 2 (stderr) 以简单地执行 fd 1 正在执行的操作。
command >>file 2>&1
您会收到错误,2>>&1
因为>>&
它不是重定向运算符。
读重定向在 bash 手册中,特别是第 3.6.5 和 3.6.8 节
答案2
由于它被标记为bash
,因此您可以使用&>>
它来重定向(附加)stdout 和 stderr。
command &>>file