有人可以解释这两个代码之间的区别吗?
bad_command 2>& >> file.out
和
bad_command >> file.out 2>&
手册上说这两个代码是不同的,第一个命令不会向file.out输出任何内容。
所以,这是我的问题。
1/这是什么原因?
2/ 是否有描述运算符优先级如何在 shell 中工作的文档?shell 如何解析并使其成为语法树。
3/它的正确语法和顺序是什么?
- 提前致谢 -
有人可以解释这两个代码之间的区别吗?
bad_command 2>& >> file.out
和
bad_command >> file.out 2>&
手册上说这两个代码是不同的,第一个命令不会向file.out输出任何内容。
所以,这是我的问题。
1/这是什么原因?
2/ 是否有描述运算符优先级如何在 shell 中工作的文档?shell 如何解析并使其成为语法树。
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 现在相同)