Shell脚本 - io重定向 - 运算符的优先级

28 浏览
0 Comments

Shell脚本 - io重定向 - 运算符的优先级

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

bad_command 2>&  >> file.out 

bad_command >> file.out 2>& 

手册中说这两个代码是不同的,第一个命令将不会将任何输出写入file.out文件。

所以,这是我的问题。

1/ 这是什么原因?

2/ 是否有一个描述shell中操作符优先级如何工作的文档?

shell是如何解析并生成语法树的。

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

--提前感谢--

0
0 Comments

问题的出现原因是两个命令行的重定向语法错误,正确的语法应该是:

bad_command 2>&1  >> file.out

bad_command >> file.out 2>&1

这两个命令之间存在差异。重定向是命令,它们按从左到右的顺序执行。重定向操作作用于进程的文件描述符(fds)。你可能听说过标准文件描述符#0(标准输入stdin)、#1(标准输出stdout)和#2(标准错误stderr)。

第一个命令行的重定向语句的含义是:"将文件描述符2复制为文件描述符1的副本,然后将文件描述符1改为追加到'file.out'"(第二个重定向对文件描述符2没有影响,它仍然是最初文件描述符1的副本)。

第二个命令行的重定向语句的含义是:"将文件描述符1改为追加到'file.out',然后将文件描述符2设为文件描述符1的副本"(第一个重定向对第二个重定向有影响,两个文件描述符现在相同)。

那么关于 "operator precedence" 的文档呢?这个文档不存在吗?

你具体指的是哪个 "operator precedence" 文档呢?

0