Bash
Bash:重定向到文件,總是創建新的
在 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
)。如果它是符號連結但不引用文件,則刪除它。