MacのZshはシェル起動時にPATHをリセットする
zprofileに書いていたPATH設定だけが有効になっていなかったので調べたという話。zprofileに書いていたPATH以外の環境変数は有効になっていたのでzprofileが呼ばれていないわけではなかった。
path_helper
Macにはpath_helperというやつがあって、PATH環境変数を/etc/pathsや/etc/paths.dに書かれているパスで設定しなおす。で、こいつがまたいたるところで呼ばれる。
zshで呼ばれる設定ファイル
ログイン(ログインシェルとして起動)時にはzshenvとzprofile、対話シェルとして起動時にはzshenvが呼ばれる。PATHの設定は既存のPATHに追加していくので、ログイン時の一度だけ呼ばれて欲しい。そのためzprofileに書いていた。
件のzshenvは以下のようになっていた。
/etc/zshenv
# system-wide environment settings for zsh(1) if [ -x /usr/libexec/path_helper ]; then eval `/usr/libexec/path_helper -s` fi
zshenvでpath_helperが呼ばれているということは、対話シェルが起動する度にPATHがリセットされることになる。
対処
結局、/etc/zshenvの全行をコメントアウトすることにした。これでzprofileに書いていたPATH設定が有効になった。
追記 6/25 2:15
コメントいただきまして、brew info zshに情報がありました。これに沿ってやった方が良さそう。やはり/etc以下はあまり変えたくないので。
$ brew info zsh To use this build of Zsh as your login shell, add it to /etc/shells. If you have administrator privileges, you must fix an Apple miss configuration in Mac OS X 10.7 Lion by renaming /etc/zshenv to /etc/zprofile, or Zsh will have the wrong PATH when executed non-interactively by scripts. Alternatively, install Zsh with /etc disabled: brew install --disable-etcdir zsh
ということなので、
$ brew install --disable-etcdir zsh $ sudo vi /etc/shells (/usr/local/bin/zshを追加) $ chsh (Shellを/usr/local/bin/zshに変更)