fish shellがPATHをぐちゃぐちゃにした💢
shellとしてfishがすごく気に入っていたのですが、この間、jenv
なるものを入れてjavaのバージョンを切り替えられるようにしようとした時にうまく設定できないことがありました。
原因を探っていくとどうやらPATHの順番が思っていたものと違う感じで設定されているようです。
$ echo $PATH
/usr/local/bin /usr/bin /bin /usr/sbin /sbin /Users/hogeuser/.jenv/shims /Users/hogeuser/.jenv/bin
PATHの順序が変わっているせいで/Users/hogeuser/.jenv/shims
内のjavaではなく、/usr/bin/java
のjavaを起動してしまい、jenvによる切り替えがうまくいかない...
...なんでやねん! (1週間前まで設定したPATHはちゃんと/usr/bin
とかの前に置かれてたやんけ!)
私の環境ではデフォルトシェルをfishにしているわけではなく、.bash_profile
の設定を流用したいので.bash_profile
を読み込んだ後、exec fish
をしてfishを起動しています。
~/.config/fish/config.fish
に環境PATHを書き直すのが一番なんでしょうが、fish用の設定の書き方を記載しているものがないことも多く書き直すのがめんどくさい大変です。
この人も同様の問題で困っている様子↓
Bash profileからFishを起動している場合のPATHの順番を正す
fishのスクリプトでPATHの順序を入れ替えたりするのがいいのかなと思いましたが、それも大変です。
そこで少し強引ですが、簡単にこれを解決する方法を紹介します。
解決策
~/.bash_profile
の最後あたりに以下を追記します。
# ~~
# PATHの設定など
export TO_FISH_PATH=$PATH
# fish起動
exec fish
そして~/.config/fish/config.fish
に以下を追記します。
# PATHを設定
set PATH $TO_FISH_PATH $PATH
これは.bash_profile
で設定したPATHを一旦環境変数として退避させておき、その値をfishで設定されたPATHの前に追加しちゃうという方法です。
$ echo $PATH
/Users/hogeuser/.jenv/shims /Users/hogeuser/.jenv/bin /usr/local/bin /usr/bin /bin /usr/sbin /sbin /usr/local/bin /usr/bin /bin /usr/sbin /sbin /Users/hogeuser/.jenv/shims /Users/hogeuser/.jenv/bin
fishによって設定されたPATHに追加するのでPATHが2倍の長さになりますが、これでちゃんと動くのでとりあえずOKということにします←。
最後に
以前は順序が変わることなく問題なく設定できていたのですが、アップデートしたからなのか急にこのような事態になりました。原因がちょっとわかっていませんがとりあえず解決したのでしばらくはこのままでいこうと思っています。
困っている人のお役に立てれば幸いです。
何かいい解決策があれば教えていただければと思います。よろしくお願いします。