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

  • 31
    Like
  • 5
    Comment
More than 1 year has passed since last update.

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