tmuxでanyenv(*env)で*env/shimsがsystemのPATHより前に読まれてsystemが使われてしまう対処
anyenvを使っているんですが、
/usr/local/heroku/bin /Users/monmon/.anyenv/envs/rbenv/bin /Users/monmon/.anyenv/envs/plenv/bin /Users/monmon/.anyenv/envs/rbenv/shims /Users/monmon/.anyenv/envs/plenv/shims /Users/monmon/.anyenv/bin /Users/monmon/local/bin /Users/monmon/bin /usr/local/sbin /usr/local/bin /usr/bin /usr/bin /bin /usr/sbin /sbin /usr/local/bin
のようなPATHがtmuxを起動すると
/usr/local/heroku/bin /Users/monmon/.anyenv/envs/rbenv/bin /Users/monmon/.anyenv/envs/plenv/bin /Users/monmon/.anyenv/bin /Users/monmon/local/bin /Users/monmon/bin /usr/local/sbin /usr/local/bin /usr/bin /usr/bin /bin /usr/sbin /sbin /usr/local/bin /usr/local/heroku/bin /Users/monmon/.anyenv/envs/rbenv/bin /Users/monmon/.anyenv/envs/plenv/bin /Users/monmon/.anyenv/bin /Users/monmon/local/bin /Users/monmon/bin /usr/local/sbin /Users/monmon/.anyenv/envs/rbenv/shims /Users/monmon/.anyenv/envs/plenv/shims
のようになってshimsが
/usr/local/bin
/usr/bin
より前に読まれてしまい、plenvのperlではなくsystemのperlが使われてしまいます(typeset -U path PATHはしてない状態)。
で、自分の環境だけの話なのかなぁと思ったら
http://konboi.hatenablog.com/entry/2013/12/12/213931
みたいなのも見つけて
rbenv works by inserting a directory of shims at the front of your PATH:
~/.rbenv/shims:/usr/local/bin:/usr/bin:/bin
ってのも見て「どうしたらいいんだろう?」と中身見てみた。
結果、anyenvだけの話ではないのだけど、~/.anyenv/libexec/anyenv-init内の
102 echo "$(${ENV_ROOT}/bin/${env} init -)"
の所で、初めに実行された時には
export PATH=/Users/monmon/.anyenv/envs/plenv/shims:/Users/monmon/.anyenv/bin:/Users/monmon/local/bin:/Users/monmon/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
なんですが、tmuxを起動した時にもう一度実行された時には
source /Users/monmon/.anyenv/envs/plenv/libexec/../completions/plenv.zsh
になるので、shimsをPATHに入れるタイミングが初めにしかなく、shimsがsystemより前になってしまう。
ということで、結果的に良いか分からないけど、shimsをPATHで読み込むようにしました。
- ANYENV_ADD_PATH="${ENV_ROOT}/bin:${ANYENV_ADD_PATH}" + ANYENV_ADD_PATH="${ENV_ROOT}/bin:${ENV_ROOT}/shims:${ANYENV_ADD_PATH}" https://github.com/monmon/anyenv/commit/5e976cd66904b8e4771f1aca8ed4b32ab43de80d
こうすることで、tmux使ってない場合には
/Users/monmon/.anyenv/envs/rbenv/bin /Users/monmon/.anyenv/envs/rbenv/shims /Users/monmon/.anyenv/envs/plenv/bin /Users/monmon/.anyenv/envs/plenv/shims /Users/monmon/.anyenv/envs/rbenv/shims /Users/monmon/.anyenv/envs/plenv/shims
となってしまって良いのか悪いのかわからないけど、僕はtypeset -U path PATHでPATHの重複消しているのでいいかなと思いました。
これ、anyenvだけの問題ではないと思うのでもっといい解決方法あるんじゃないかなと思ったんだけど探せませんでした。