Bash
使用 cat、sort、tee 和管道就地修改文件時的行為不一致
情況:使用以下命令時:
cat foo | sort | tee foo
where
foo
是多行的文本文件,結果不一致。我觀察到的兩個結果是:
- 文件被排序,排序後的內容被列印到標準輸出。
- 文件被清空,並且沒有列印任何內容。
問題:為什麼會發生這種情況?
PS我意識到我的系統上
sort
有一個-o
選項。
您創建了一個競爭條件。您啟動兩個命令(在管道的兩側),它們都嘗試以不同的方式訪問同一個文件(讀取與擦除)。結果是機會。
cat foo | sort | ( tee foo.new; mv foo.new foo)