1

有人可以解释这两个代码之间的区别吗?

bad_command 2>&  >> file.out 

bad_command >> file.out 2>& 

手册上说这两个代码是不同的,第一个命令不会向file.out输出任何内容。

所以,这是我的问题。

1/这是什么原因?

2/ 是否有描述运算符优先级如何在 shell 中工作的文档?shell 如何解析并使其成为语法树。

3/它的正确语法和顺序是什么?

- 提前致谢 -

4

1 回答 1

3

两者在语法上都是错误的。我想你的意思是

bad_command 2>&1  >> file.out

bad_command >> file.out 2>&1

反而。

这之间,是有区别的。重定向是命令式语句,从左到右执行。重定向对进程的文件描述符 (fds)进行操作。您可能听说过标准文件描述符#0(标准输入/stdin)、#1(标准输出/stdout)、#2(标准错误/stderr)。

第一个命令行的重定向读取:“使 fd 2 成为 fd 1 的副本,但随后将 fd 1 更改为附加到 'file.out'”(第二个重定向对 fd 2 无效,它仍然是 fd 1 的副本是在开始)

秒读:“更改 fd 1 以附加到 'file.out',然后使 fd 2 成为 fd 1 的副本”(第一次重定向对第二次重定向有效,bot fds 现在相同)

于 2012-08-24T22:46:38.173 回答