Bash模糊多重定向

时间:2013-03-06 01:31:07

标签: bash process posix io-redirection

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

echo "test" > out1 > out2

运行之后,创建了out1和out2,但是out1为空,out2包含“test”。

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

1 个答案:

答案 0 :(得分:5)

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

已编辑添加 Bash参考手册 puts it

  

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

作为POSIX puts it

  

如果使用命令指定了多个重定向运算符,则评估顺序从开始到结束。

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

{ echo test > out1 ; } > out2

实际上会将test写入out1并将out2留空,因为{}的重定向发生在echo test > out1运行之前。