Bash

Bash:重定向到文件,總是創建新的

  • January 31, 2018

在 bash 中,一個命令連結

echo test > actual.txt

actual.txt用“test”替換文件的內容,如果文件不存在則創建文件。但是,如果文件確實存在,bash 只會打開它,截斷它,然後將新內容寫入文件。

具體來說,重定向命令在這種情況下會失敗:

ln -s /some/illegal/path link.txt
echo test > link.txt

Bash 4.4.12 給了我令人困惑的錯誤資訊link.txt: No such file or directory

避免這種情況的一種方法是確保在執行重定向命令之前刪除文件。

rm link.txt && echo test > link.txt

不過,我想知道是否對 bash 選項或重定向運算符進行了一些調整,以防止這種故障模式。有任何想法嗎?

嘗試寫入死符號連結相當於嘗試寫入不存在的路徑。無法“調整”輸出重定向以在 中創建路徑(包括中間目錄)bash,並且沒有任何 shell 選項bash可以自動執行此操作。

如果中間路徑存在,但連結的終點不存在,那麼它將由重定向創建。

你可以做類似的事情

if [ -h file ] && [ ! -f file ]; then
   rm file
fi

測試“文件”是否是符號連結 ( -h) 以及它是否引用了存在的正常文件 ( -f)。如果它是符號連結但不引用文件,則刪除它。

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