apt-get upgradeでfishが大量のエラーを吐くようになった

ま た か (bobthefishでstring関係のエラーが出た - in neuro

軽い気持ちでapt-get update && apt-get upgradeしたところ、fishが2.7.0になった。その後、argparseがないとかなんとかのエラーが出る。 bobthefishが内部で使っているコマンドなのでテーマを描画しようとする度に大量のエラーが出て、コンソールが使い物にならない。

aptレポジトリは既にfishが用意しているものなので乗り換え先もない。仕方がないのでapt版は捨てて自前ビルドすることにした。 しばし懐かしのbashに戻ることになる。補完が効かなくなるので少しストレスフルだ。

purgeは設定ファイルも消した気がするので、config/fish/config.fishも消えたりしないよなと少し怖くなったのでremoveにする。

$ sudo apt-get remove fish

fish公式からtarballを持ってきて、解凍し、ビルドする。

$ wget https://fishshell.com/files/2.7.0/fish-2.7.0.tar.gz
$ tar xvf fish-2.7.0.tar.gz
$ cd fish-2.7.0
$ ./configure
$ make
$ sudo make install

これで/usr/local/にfishが入った。とりあえず起動してみる。これで直らないなら仕方ない、fishのgitレポジトリから最新版を取ってきて、それでもダメならissueを立てるしかない。

$ /usr/local/bin/fish
~>

よろしい。テーマも元通り表示され(設定がそのまま使えている可能性が高い)、エラーメッセージも出ていない。

とりあえずこのままfishを使い続けることとして、pathがaptの頃と変わってしまったので(/usr/bin/fish -> /usr/local/bin/fish)、いくつかの設定を変えておかないと死ぬ危険性がある。

まずはchshだ。

$ chsh -s /usr/local/bin/fish [username]
you may not change the shell for [username]

は? ちょっとよくわからないですね……

紆余曲折あり、/etc/shellsを変えていないことに気付いた。

$ sudo su
# vim /etc/shells
(/usr/local/bin/fishを書き足す)

これでchshは通った。

次はtmuxだ。実を言うと、そのままtmuxに入った後新規ウインドウを作れなかったので気付いた。 .tmux.confに以下のような部分があったので直す。

# default shell
set-option -g default-shell   /usr/local/bin/fish
set-option -g default-command /usr/local/bin/fish

なぜだかよくわからないが一度tmuxのセッションを全て閉じないと解決しなかった。

というわけでとりあえずfishは動くようになった。