对于我的操作系统类,我们必须实现类似程序的shell。我遇到了一个我不知道如何解释的例子:
echo "test" > out1 > out2
运行之后,创建了out1和out2,但是out1为空,out2包含“test”。
启动回显过程并修改要打印到out1的标准输出后,接下来会发生什么?
答案 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
运行之前。