使用 cat、sort、tee 和 Pipes 就地修改文件时行为不一致

使用 cat、sort、tee 和 Pipes 就地修改文件时行为不一致

情况:使用以下命令时:

cat foo | sort | tee foo

wherefoo是多行文本文件,结果不一致。我观察到的两个结果是:

  1. 文件已排序,排序后的内容将打印到 stdout。
  2. 文件被清空,并且没有打印任何内容。

问题: 为什么会出现这种情况?

PS 我意识到我的系统上sort有一个选项。-o

答案1

您创建了一个竞争条件。您启动两个命令(在管道的两侧),它们都尝试以不同的方式访问同一文件(读取与擦除)。结果就是机会。

cat foo | sort | ( tee foo.new; mv foo.new foo)

相关内容