fishというシェルがどうやら良いらしいということでbashから乗り換えてみましたが、色々と問題が。
Homebrewで提供されているOPAMの安定版の最新バージョンは1.2.2ですが、OPAM 1.2.2のfish用の設定ファイルに誤りがあり、場合によってはfishシェルが正しく動作しなくなる場合があるので、書き残すことにしました。
ちなみに、OPAMのバージョンが古すぎる場合は、fish用の設定ファイル自体が存在しないこともあるので気をつけてください。
config.fishの設定
~/.config/fish/config.fishに以下の一行を追加して下さい(.opam/がホームディレクトリ以外の場所にある場合は適宜修正して下さい)。
source ~/.opam/opam-init/init.fish > /dev/null 2> /dev/null; or true
これがないと、OPAMでインストールしたパッケージがうまく実行されません。
variables.fishの変更
init.fishは単にvariables.fishを呼び出しているだけですが、variables.fishに誤りがあるため、config.fishの変更だけを適用すると、fishシェルが正しく動作しなくなるので気をつけて下さい。
ということで、~/.opam/opam-init/variables.fishの1行目と4行目をそれぞれ以下のように修正して下さい。
1 set -gx PATH ~/.opam/system/bin $PATH;
4 set -gx MANPATH "$MANPATH" ~/.opam/system/man;
注意すべきは、$MANPATH
はダブルクォーテーションで囲まれていますが、$PATH
は囲まれていないという点です。
$PATH
をダブルクォーテーションで囲むと$PATHが~/.opam/system/bin
で上書きされてしまい、OPAMでインストールされたパッケージのコマンド(とexit)以外は実行できなくなります。
一方、"$MANPATH"
のダブルクォーテーションがないと、OPAMのマニュアルが正しく追加されません。
この辺はfishスクリプトの仕様がアレな感じがしますが、fishスクリプトの文法に明るくないので、どうしてこうなってるのかはよく分かりません…。
ちなみに、追加するパスはダブルクォーテーションで囲まれていても囲まれていなくても大丈夫なようです。