Bash

使用 cat、sort、tee 和管道就地修改文件時的行為不一致

  • December 28, 2017

情況:使用以下命令時:

cat foo | sort | tee foo

wherefoo是多行的文本文件,結果不一致。我觀察到的兩個結果是:

  1. 文件被排序,排序後的內容被列印到標準輸出。
  2. 文件被清空,並且沒有列印任何內容。

問題:為什麼會發生這種情況?

PS我意識到我的系統上sort有一個-o選項。

您創建了一個競爭條件。您啟動兩個命令(在管道的兩側),它們都嘗試以不同的方式訪問同一個文件(讀取與擦除)。結果是機會。

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

引用自:https://unix.stackexchange.com/questions/413399