シェルで >
を使うと標準出力をファイルに書き込めますが、意図せずファイルを上書きしてしまう危険があるので、これができないようにしている人も多いのではないでしょうか。
.zshrc
setopt noclobber
これを設定していると既にファイルが存在する場合エラーになります。
$ echo foo > hoge
$ ls
. .. hoge
$ echo foo > hoge
zsh: file exists: hoge
これはこれで嬉しいのですが、時にはファイルが存在することを理解した上で、あえて上書きしたい場合もあります。そういう場合は >|
か >!
を使います。
$ ls
. .. hoge
$ echo bar >! hoge
$ cat hoge
bar
さらに >>
でファイルに追記できますが、これもファイルが存在しない場合はエラーが発生してしまいます。
$ echo foo >> huga
zsh: no such file or directory: huga
ファイルが存在しない場合は新規作成したい場合(clobberが有効な状態のときの >>
と同じ挙動)にするには先ほどと同様に >>|
か >>!
を使います。
$ echo foo >>! huga
$ cat huga
foo