使った
set -o noclobber
長年かけて.bashrc
または最近では.zshrc
。
しかし、たとえば、GitHubの新しいリポジトリの説明では、次の行が見つかりました。
echo SomeName >> README.md
.zshrc
この行があると失敗しますset -o noclobber
。それは言うでしょう:
zsh: no such file or directory: README.md
確認するために、私を新しいzshに.zshrc
移動して起動し、ファイルがないときにその行が機能しました。ただし、新しいzshを起動して入力して実行すると、存在しないと表示されます。.zshrc_not_used
echo SomeName >> README.md
README.md
set -o noclobber
echo SomeName >> README_ANOTHER_ONE.md
README_ANOTHER_ONE.md
(背景情報は>>
「append to」です。ファイルがない場合は新しく作成します。)
どうなりますか?もちろん、set -o noclobber
誤ってファイルを削除したくないので、使用したいのですが、シェルに何かを消さないでnoclobber
くださいecho SomeName >> README.md
。zsh: no such file or directory: README.md
。
実際、数年前にBashでこれが起こったことを覚えていますが、今はそれを再現することはできません。何が起こっているのか、それに対する良い解決策を知っている人はいますか? (問題を解決するには、touch README.md
beforeを手動で入力しないでくださいecho SomeName >> README.md
。「何が起こったのかわからず、修正してください」になるからです。)
ベストアンサー1
これは録音されたzshの従来の動作(cshから継承されますnoclobber
)でksh / POSIX動作を取得するappendcreate
ことに加えて、noclobber
次の設定を行う必要があります(zsh 5.1以降を想定)。
APPEND_CREATE <K> <S>
このオプションは
NO_CLOBBER
(-C
)が有効な場合にのみ適用されます。
>>
このオプションを設定しないと、まだ存在しないファイルに追加のリダイレクト()を使用すると、シェルはエラーを報告します(既存の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