LoginSignup
17
10

More than 5 years have passed since last update.

bash_profileで設定したPATHがfish shell呼び出し後にぐちゃぐちゃになった時のゴリ押し解決法

Posted at

fish shellがPATHをぐちゃぐちゃにした💢

shellとしてfishがすごく気に入っていたのですが、この間、jenvなるものを入れてjavaのバージョンを切り替えられるようにしようとした時にうまく設定できないことがありました。

原因を探っていくとどうやらPATHの順番が思っていたものと違う感じで設定されているようです。

fish_shell
$ 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の最後あたりに以下を追記します。

~/.bash_profile
# ~~
# PATHの設定など

export TO_FISH_PATH=$PATH

# fish起動
exec fish

そして~/.config/fish/config.fishに以下を追記します。

~/.config/fish/config.fish
# PATHを設定
set PATH $TO_FISH_PATH $PATH

これは.bash_profileで設定したPATHを一旦環境変数として退避させておき、その値をfishで設定されたPATHの前に追加しちゃうという方法です。

fish_shell
$ 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ということにします←。

最後に

以前は順序が変わることなく問題なく設定できていたのですが、アップデートしたからなのか急にこのような事態になりました。原因がちょっとわかっていませんがとりあえず解決したのでしばらくはこのままでいこうと思っています。
困っている人のお役に立てれば幸いです。
何かいい解決策があれば教えていただければと思います。よろしくお願いします。

17
10
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
10