ばーろぐわにる

SIerからWEB系?インフラエンジニアにジョブチェンジした見習いの備忘録

fishでリダイレクトによる上書きを禁止する

背景

もともとはfishではなくzshを使っていました。キーバインドghq/pecoなどを利用していろんなカスタマイズをしていました。ある日、.zshrcにexportを追加しようとシェルからリダイレクトで追記をしました。したつもりになっていました。コンソールを再度開くとカスタマイズしたキーバインドが使えなくなっており、調べてみると.zshrcが1文のexportを残してきれいになっていました。そこからfishを利用するようになり、同じ過ちを起こさないように今回の対策を行います。

設定

事前動作確認

$ cat hoge.txt 
hoge
$ echo fuga > hoge.txt
$ cat hoge.txt 
fuga

> を一個つけ忘れると全部上書きされる。危険。

調べてみたところ

bash, zshnoclobber オプションで設定できるが、fishには存在しない。 代わりに>? を使えとのこと。これなら中身がある場合上書きされない。

github.com

$ echo hige >? hoge.txt
The file 'hoge.txt' already exists
$ echo hige >? hige.txt
$ cat hige.txt 
hige

ただこれは >? を使った場合上書きされないだけで、>> を打ち間違えて > にしちゃうと上書きされる。解決になってない。

結論

おとなしく /Users/hitoshi.fujita/.config/fish をGitで管理します。

$ cd ~/.config/fish
$ git add --all
$ git commit -m"my first commit"