search
LoginSignup
27

More than 5 years have passed since last update.

posted at

updated at

Mac OSX El Capitan での ~/.zshenv の扱いについて

El Capitanにアップグレードしてから,zshのPATHの様子がおかしい

調べてみると,/etc/zprofile が作られていて,その中身は

/etc/zprofile
# system-wide environment settings for zsh(1)
if [ -x /usr/libexec/path_helper ]; then
   eval `/usr/libexec/path_helper -s`
fi

のようにpath_helperを実行させるものだった。
このpath_helperは

「/etc/pathsおよび/etc/paths.d/*からPATHを作り出し、元からあったPATHから重複を除いたものを後ろにつける」

という余計なことをしてくれるものらしく,/etc/zprofileは,~/.zshenvより後に読み込まれるため,せっかくせっせと~/.zshenvにPATHなどを設定していても書き変えられてしまう。

解決法

  1. ~/.zshenvではなく~/.zshrcでPATHの設定をする。
    これをするとせっかく.zshenvと.zshrcを使いわけてる意味がなくなる。

  2. /etc/zshprofileの中身をコメントアウトする。
    あんまりシステムデフォルトを変えたくはないが,こちらで対処。

追記

  • 解決法2.の場合,/etc/paths,/etc/paths.d/内に置いてあるPATH設定が読み込まれなくなるので,自分で読み込むようにした方がよいのかも。 というわけで export PATH する直前に
~/.zshenv
eval `/usr/libexec/path_helper -s`

を付け加えることにしました。
つまりpath_helperと~/.zshenvのPATH設定の順序を逆にしたことになります。
もっとスマートな解決法を知ってたら誰か教えてください。

  • 下のyudai-nktさんのコメントにある方法が一番すっきりして良さそうです。つまり, /etc/zprofileは書き変えず,
~/.zshenv
setopt no_global_rcs

をつけ加える。

参考

OSXでのzshにおけるPATH設定
http://hayajo.tumblr.com/post/12281915216/osx%E3%81%A7%E3%81%AEzsh%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8Bpath%E8%A8%AD%E5%AE%9A

Fixing your zsh path after upgrading to El Capitan.
http://richa.avasthi.name/blog/2015/10/fixing-your-zsh-path-after-upgrading-to-el-capitan/

path_helperについて。Mac OSX 版
http://takuya-1st.hatenablog.jp/entry/2013/12/14/040814

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
What you can do with signing up
27