Bash模糊多重定向

Mih*_*csu 1 bash posix process io-redirection

对于我的操作系统类,我们必须实现类似程序的shell.我遇到了一个我不知道如何解释的例子:

echo "test" > out1 > out2
Run Code Online (Sandbox Code Playgroud)

运行之后,创建out1和out2,但out1为空,out2包含"test".

在我启动回显过程并修改要打印到out1的标准输出后,接下来会发生什么?

rua*_*akh 5

重定向从左到右处理:首先> out1(创建out1文件描述符#1 并将其挂钩),然后> out2(创建out2并挂起文件描述符#1到它,取代前一个).所以它实际上只做两次完全相同的事情(close(1)加上fd = open(...)加号dup(fd)),只是两个不同的文件.

编辑添加:正如Bash参考手册 所说:

重定向按其出现的顺序从左到右处理.

正如POSIX 所说:

如果使用命令指定了多个重定向运算符,则评估顺序从头到尾.

当然,这些解释仅适用于重定向实际上在同一个简单命令中的情况.像这样的东西:

{ echo test > out1 ; } > out2
Run Code Online (Sandbox Code Playgroud)

实际上写testout1,并留下out2空白,因为重定向{}发生之前echo test > out1被运行.

  • @Rubens:由POSIX定义; 请参阅http://pubs.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_07,搜索短语"如果使用命令指定了多个重定向运算符,则评估顺序从头到尾. " (2认同)