答案1
这里:
cat test | shuf > test
>
优先的含义是:
(cat test) | (shuf > test)
并不是:
(cat test | shuf) > test
尽管如果我们使用两个不同的文件,这两个分组之间无论如何都不会有任何差异。
当您使用同一个文件时,重要的是管道两侧的两个命令并发执行。这些命令是cat test
和shuf > test
。 >
表示“打开以进行写入和截断”,而cat
将“打开以进行读取”,读取并关闭。既然这两件事正在发生同时,它们的集体运算顺序之间的关系是不定。在 shell 管理截断文件之前,有可能cat
会获取该文件。shuf > test
但这是一个很小的机会,因为涉及的因素更多。只有cat
在非常幸运的情况下才会发生调度的shuf > test
。
故事的寓意:不要这样做——改用两个文件。