» で追記できない

zshで>>による標準出力のファイルへの追記をしようとするとエラーになった。

$ ls >> result.txt
zsh: no such file or directory: result.txt

出力先ファイルが無い場合にこのエラーが発生した。

原因:preztoでnoclobberオプションが有効になっていた

preztoを導入していると>>による新規ファイルへの追記できないようになる。
prezto内部でsetopt noclobberが実行されており、このコマンドによって以下の様になる。

  • >による既存ファイルの上書きを防ぐ
  • >>による存在しないファイルへの書き込みを防ぐ

どちらも誤った操作による意図しないファイル操作を防ぐ。

対処

noclobberの設定を解除する

.zshrcなどでnoclobberの設定を解除する。

setopt clobber

上記を加えれば存在しないファイルへの>>での書き込みができるようになる。

preztoでnoclobberが有効になっている場合は、preztoの読み込みのあとで上記コマンドを実行する必要がある。

>>! もしくは>>|で追記する

noclobberの設定を残したまま一時的に書き込みたい場合は>>の代わりに>>!で強制書き込みできる。
>>|も同じ。

$ ls >>! result.txt
$ ls >>| result.txt