全然ZSHの仕組みを知らなかったとかそういう話です。
情弱なので自分のzshがどこからPATHを読んでるのか分かってない
— Pasta-K/ShutoMorii (@pastak) 2014, 2月 20
zshがPATHを複数回読んでいる気がする
— Pasta-K/ShutoMorii (@pastak) 2014, 2月 20
echo $PATHすると内容が重複してる
— Pasta-K/ShutoMorii (@pastak) 2014, 2月 20
@FromAtom 確認しましたが1つでした。
— Pasta-K/ShutoMorii (@pastak) 2014, 2月 20
そもそもずっと、phpenv
が上手く使えなくておかしいと思ってた。
いつも、デフォルトのphpが起動するので、毎回$ ~/.phpenv/shims/php hoge.php
とかってしてた。これ絶対おかしくて治したいと思ってた。他にもhomebrew
経由で入れたVimじゃなくてデフォルトのVimが立ち上がるとかでずっとPATH周りが怪しいなと思ってたけど手を出せずにいた。
最近、vim-gitgutter
っていうVimプラグインがVim 7.3 Vim 7.3.105以降を要求してくるようになったので、Vimのバージョンを上げたくなったから重い腰を上げて戦うことにした。
まず、PATHが異常な感じで、zshrc
に書いてないPATHが書いてあったり、PATHが重複したりしていて絶対これの所為だと思った。
Homebrewのインストール方法を書いたサイトとかには
export PATH=/usr/local/bin:/usr/bin
って書けば良いって書いてあるから、そうやって書いてるのに、/usr/bin
が$PATH
の中では先に居てそっちが優先されるみたいなことになってた。
頑張ってググってたら、中身自体は今回のことと直接関係はなかったんだけど、こういうページに遭遇した。
ここの解決策のとこに載ってるpostに/etc/paths
がどうこうみたいなことが書いてあって、これっぽいなぁと思ってもう少し調べた。
どうやら、/etc/paths
に書いてあるのは連結されてシェル起動時に環境変数の$PATH
に読み込まれるっぽいことがわかったので、/etc/paths
を開くと、確かに色々それっぽいディレクトリのパスが書かれていたので、順番を入れ替えて、/usr/local/bin
を先頭にした。
/etc/pathsの記述を修正したら今まで困ってたことが全部解決した
— Pasta-K/ShutoMorii (@pastak) 2014, 2月 20
homebrewで入れたVimとかもやっと使えるようになった
— Pasta-K/ShutoMorii (@pastak) 2014, 2月 20
PATHについて少し詳しくなれた
— Pasta-K/ShutoMorii (@pastak) 2014, 2月 20
これでどうにかなるだろうと思ったけど、まだ解決しなくて、おかしいままだった。homebrew
で入れたVimとかは立ち上がるようになったけど、phpenv
で入れたPHPとかは相変わらずダメだった。
でも、ふと、そういやシェルの起動はtmux
上でやってるから、tmux
が何かしてるのかもしれないと思った。
試しにiTerm2
で新規タブを作ってシェルを立ち上げると意図通りに設定できていた。
これはもう絶対にtmux
が絡んでると確信したので、そういう感じでググる。そしたら、それっぽい情報が見つかった。インターネット便利。
解決方法はこのサイトに書いてある通り*1 で、/etc/zshenv
を
# system-wide environment settings for zsh(1) if [ -x /usr/libexec/path_helper ]; then PATH='' eval `/usr/libexec/path_helper -s` fi
と書き直した。
原因はこのページの下部の説明のとこに書かれてました。
PATHを設定する際、重複したパスが存在すると"左"に書かれているパスが優先して設定され、"右"にあるパスは削除されます。
/etc/zshenv
の中で呼んでるpath_helper
っていうのが環境変数を設定してくれているようで、こいつがサブシェル起動時に、親シェルの環境変数を引き継いで設定をして、その後に~/.zshrc
の中身が読まれるので、上手くいかないという話だった。
はぁ、やっと解決した。tmuxでzsh使う時にPATHがこういう仕組みになってるのってみんな知ってて設定も上手いことなってるんだろうか
— Pasta-K/ShutoMorii (@pastak) 2014, 2月 20
tmuxとzshの話、/etc/zshenvでゴニョると良い感じにphpenvとか使えるようになった
— Pasta-K/ShutoMorii (@pastak) 2014, 2月 20
これで無事、phpenv
で入れたPHPが使えるようになった。
ついでに環境変数周りについても少し詳しくなれた。
めでたしめでたし。
*1: 元サイトには.zshrcを弄れと書いてあったけど、読み込み順的に/etc/zshenvを書き直した方が良さそうな気がしたから、そうした。