当我打字时
cat some_file > new_file1 > new_file2
some_file
我从innew_file2
和 empty得到输出new_file1
。
这其中的内在逻辑是什么?更具体地说,stdout
文件的内容是什么?
注意:在 Windows 上,会跳过中间文件。
答案1
这取决于外壳。
在 bash 中,echo derp >file1 >file2
首先打开file1
,截断它,然后安排将stdout
ofecho derp
写入file1
。然后 bash 对 执行相同的操作file2
:它打开file2
、截断它,并安排将stdout
ofecho derp
写入而不是写入file2
。
最终效果是被file1
截断(即内容被删除)并且stdout
仅进入file2
.没有发生链接。 Bash 一次只能将标准输出重定向到一个地方。对于管道也是如此:echo derp > file | cat
“derp”的结果被写入文件,而不是管道。
然而,在 zsh 中,正如您直观所期望的那样,echo derp >file1 >file2
同时写入file1
和。如果您使用 zsh,file2
请参阅 MULTIOS了解详细信息。man zshmisc
要在 之外实现此目的zsh
,您可以简单地使用tee
:echo derp | tee file1 file2 > /dev/null
相当于 zsh 的echo derp >file1 >file2
。