OSXのiterm2でzsh 5.0.8バージョンを使用しています。
コンピューターを起動すると、printenv
に$PATH
変数が表示されます。
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/git/bin
私の理解では、zshは次のファイルを順番に読み込みます。
/etc/zshenv
~/.zshenv
/etc/zshrc
~/.zshrc
チェックしたところ、最初の3つのファイルがなく、.zshrc
は基本的に空で、$ PATH変数に関連するものは何もありません。
次に、$PATH
変数セットはどこにありますか???
私は文字通りこれと今日戦いました。
OS Xでは、ヨセミテPATHはかなり回り道で構築されています。
Cremefraicheが言うように、ZSHには組み込みの$PATH
があり、他に何も設定されていない場合に使用されると思いますが、それはあなたのソースではありません。まず、ディレクトリのリストを含む/etc/paths
ファイルがあります。また、ディレクトリを含むより多くのファイルを含む/etc/path.d
というディレクトリもあります。プログラム/usr/libexec/path_helper
は、これらのディレクトリのリストを取得し、それらを既存の$PATH
変数(存在する場合)とマージし、重複を削除し、/etc/paths
ディレクトリを最初にリストして結果を出力します。
自分で実行してみてください。害はありません。これが私の出力です:
$ /usr/libexec/path_helper
PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/usr/local/MacGPG2/bin:/Users/alan/.local/bin:/Users/alan/src/go/bin"; export PATH;
それ自体は何もしませんが、私のマシンでは/etc/zprofile
から呼び出されます。
if [ -x /usr/libexec/path_helper ]; then
eval `/usr/libexec/path_helper -s`
fi
Appleは、このコードをOS Xの異なるバージョンで少し動かしたようです。
all OS XでZSHが評価するファイルのリストを以下に示します。
これらのファイルの一部は、非インタラクティブシェルスクリプトとして実行する場合など、特定の状況では評価されませんが、ここでは説明しません。興味があればZSH manページにあります。
$ man zsh
/etc/zprofile
が実行されることは注目に値しますafter~/.zshenv
なので、ZSHガイドラインに従って$PATH
を.zshenvに設定すると、おそらくclobeされますpath_helper
による。この問題が発生している場合は、/etc/zprofile
を/etc/zshenv
に名前変更して、システム$PATH
をできるだけ早く設定することをお勧めします。
これはbash
を指しますが、zsh
にも適用できると思います。
[〜#〜] path [〜#〜]のデフォルト値は、
bash
のコンパイル時に決定されます。変更されている可能性がありますが、スタートアップファイルには設定されていません。
FedoraおよびRed Hat Enterprise Linuxの実践ガイド:第7版。 p359。
さらに掘り下げてみたところ、デフォルトのPATH
は実際にはコンパイル時に設定され、 init.c ファイルで確認できることがわかりました。
/* Set default path */ path = (char **) zalloc(sizeof(*path) * 5); path[0] = ztrdup("/bin"); path[1] = ztrdup("/usr/bin"); path[2] = ztrdup("/usr/ucb"); path[3] = ztrdup("/usr/local/bin"); path[4] = NULL;
私はzsh IRCに入りました。開発者は、PATHがコンパイルで設定されていることをすべて示す4つの異なるコマンドのリストを提供できました。これらのコマンドを拡張チャットに投稿しました、ただしX時間後に失われることに気付きませんでした。IRCで開発者に依頼して、自分で確認したいかどうかを確認してください。