cat、sort、tee、および Pipes を使用してファイルを変更するときの一貫性のない動作

cat、sort、tee、および Pipes を使用してファイルを変更するときの一貫性のない動作

状態:次のコマンドを使用する場合:

cat foo | sort | tee foo

複数行のテキストファイルがどこにfooあり、結果が一致しません。私が観察した2つの結果は次のとおりです。

  1. ファイルがソートされ、ソートされた内容がstdoutとして印刷されます。
  2. ファイルが空になり、何も印刷されません。

質問:なぜこのようなことが起こるのですか?

PS私のシステムにsortオプションがあることを知っています。-o

ベストアンサー1

競争条件を作りました。パイプの両側で2つのコマンドを実行します。どちらのコマンドも、異なる方法(読み取りと消去)で同じファイルにアクセスしようとします。結果はチャンスです。

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

おすすめ記事