bobthefishでstring関係のエラーが出た

状況:fishbobthefishを使うとエラーメッセージが出てテーマどころではない

原因:bobthefishfish-2.2にはないコマンドstringを使っているから

解決策:fish-shell公式サイトにあるaptレポジトリから最新版を持ってくる。

もちろん.debをダウンロードしてインストールしたり、ソースコードをダウンロードしてビルドしてもよい。

なんかこの記事のアクセス数多かったので一応最初にtl;drを追加しておいた。(2017/10/10)


普段、 fish shell なるシェルを愛用している。Linuxに触れて1年半ほどだが、最初は普通にbashを使っており、1年経つか経たないかの頃、ちょうど別のshellのことを考え始めた頃にどこかでfish shellを知って入れてみたのだったと思う。どこで見たのかは忘れてしまった。

fishがどのようなshellか、というのは様々な記事があるのでわざわざ解説するのも憚られる。Qiitaなどにいくつか記事があるので、気になる方はググっていただきたい。余談だがfishはしっかりした fish: Design document を公開している。そういうところも好感が持てた。唯一つらいのはposix互換性を切っていることだが、普段使っていてそこまで気になることでもない(ただし何かshellと相互作用するプログラムの設定をするときは気を使う必要がある)。

で、fish用のプラグインマネージャとしては oh-my-fish が有名なのだろうが、私は fisherman を使っている。これは完全に「なんとなく」だったが、oh-my-fishのプラグインもfishermanから入れられるので特に困ったことはない。

で、fishならpowerline的な「テーマ」を簡単に導入できる。例えば今回のタイトルにもあるbobthefishだ。

GitHub - oh-my-fish/theme-bobthefish: A Powerline-style, Git-aware fish theme optimized for awesome.

これを入れる利点だが、例えばC++コンパイルエラーが300行くらい出た時、tmuxを使っていても遡るのは面倒で、機械的にページスクロールしているとコマンドの行をすっ飛ばしてしまったりするが、powerline的テーマを使っていればかなり目立つので見落とすことが減った(この問題に対してこの解決方法はあまり良くない気がするが……)。gitで管理されているレポジトリでは、わざわざgit branchをしなくても今いるブランチ名が表示されるとか、前回のコマンドの返り値が視覚的に表示されたり、コマンド実行にかかった時間を勝手に計測してくれていたりする。便利だ。あと子供なので格好いいプロンプトを使っているとテンションが上がる。

で、新しく設定するPCにfishを入れ、fishermanも入れ、テーマをまあbobthefishにするか、と入れたところ、stringコマンドがどうのこうの、というエラーがプロンプトを表示するたびに出る。これは困ったということでbobthefishの中でstringコマンドが使われている部分を見に行ったところ、built-inであるかのように使われており、実際stringはfishのbuilt-inコマンドなのであった。

するってえとこれはfish自体が古いのだな、と考えてfishのバージョンを確認してみたところ、2.2かそこらだった。確かUbuntu 16.04でaptで(レポジトリを足さなくても)fishが入るようになったと喜んでそのまま入れたような気がする。Ubuntuは安定した(悪く言うと古い)パッケージを入れてくるのでこういう時たまに困る。fish公式サイトに書いてあるapt repositoryをapt-add-repositoryしてupdateしたらfish 2.5が入るようになり、アップグレードすると動くようになった。

今もいくつかの普段使うライブラリ(boostなど)やパッケージ(tmuxなど)は自前ビルドしているので(たまにライブラリの依存関係に心を折られてaptで入れる)、fishもそうした方が何かと良いのかもしれない。その前にUbuntuからGentooかArchか何かに乗り換える方が、良い経験になる気はするが。