set -o noclobber
防止使用 echo Hello >> file.txt
創建文件
我用過
set -o noclobber
多年來
.bashrc
或最近,.zshrc
。但是,我注意到,例如在 GitHub new repo 指令中,該行
echo SomeName >> README.md
如果我
.zshrc
有這條線會失敗set -o noclobber
。它會說:zsh: no such file or directory: README.md
為了確認,我將我的移動
.zshrc
到.zshrc_not_used
並啟動了一個新的 zsh,然後當文件不存在時,該行將echo SomeName >> README.md
起作用。README.md
但是現在如果我啟動一個新的 zsh 並輸入set -o noclobber
and doecho SomeName >> README_ANOTHER_ONE.md
,那麼它會說不README_ANOTHER_ONE.md
存在。(背景資訊是
>>
“附加到”,並在文件不存在時創建文件。)這是怎麼回事?當然,我想使用
set -o noclobber
,因為我不想意外清除任何文件,但是為什麼這與它noclobber
有任何關係echo SomeName >> README.md
,它說zsh: no such file or directory: README.md
. 我告訴外殼不要擦除任何東西,而是在它沒有擦除任何東西時拒絕創建新內容。我實際上記得幾年前它也發生在 Bash 中,但現在我無法重現它。有人知道發生了什麼以及對此有什麼好的解決方案嗎?(為了解決問題,不要手動輸入
touch README.md
beforeecho SomeName >> README.md
,因為那將是“在不知道發生了什麼的情況下修復它”)
這被記錄為 zsh 的傳統行為(繼承自 csh where
noclobber
來自),設置appendcreate
(假設 zsh 5.1 或更高版本)以及noclobber
獲取 ksh / POSIX 行為:
APPEND_CREATE <K> <S>
此選項僅在
NO_CLOBBER
(-C
) 生效時適用。
>>
如果未設置此選項,當對不存在的文件使用附加重定向 ( ) 時,shell 將報告錯誤(傳統的 zsh 行為NO_CLOBBER
)。如果設置了該選項,則不會報告錯誤(POSIX 行為)。% set -o noclobber % echo foo >> bar zsh: no such file or directory: bar % set -o appendcreate % echo foo >> bar % cat bar foo