情况:使用以下命令时:
cat foo | sort | tee foo
wherefoo
是多行文本文件,结果不一致。我观察到的两个结果是:
- 文件已排序,排序后的内容将打印到 stdout。
- 文件被清空,并且没有打印任何内容。
问题: 为什么会出现这种情况?
PS 我意识到我的系统上sort
有一个选项。-o
答案1
您创建了一个竞争条件。您启动两个命令(在管道的两侧),它们都尝试以不同的方式访问同一文件(读取与擦除)。结果就是机会。
cat foo | sort | ( tee foo.new; mv foo.new foo)