
状態:次のコマンドを使用する場合:
cat foo | sort | tee foo
複数行のテキストファイルがどこにfoo
あり、結果が一致しません。私が観察した2つの結果は次のとおりです。
- ファイルがソートされ、ソートされた内容がstdoutとして印刷されます。
- ファイルが空になり、何も印刷されません。
質問:なぜこのようなことが起こるのですか?
PS私のシステムにsort
オプションがあることを知っています。-o
答え1
競争条件を作りました。パイプの両側で2つのコマンドを実行します。どちらのコマンドも、異なる方法(読み取りと消去)で同じファイルにアクセスしようとします。結果はチャンスです。
cat foo | sort | ( tee foo.new; mv foo.new foo)