$PATH環境変数を設定する理由と場所をどのように知ることができますか?

$PATH環境変数を設定する理由と場所をどのように知ることができますか?

私は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? ? ?

答え1

私は文字通り今日この問題で苦労しました。

OS X Yosemiteでは、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で少し移動したように見えるため、これはコンピュータによって異なる場合があります。

リストは次のとおりですみんなOS XでZSHが読み取ったファイル(評価順):

  1. /etc/zshenv
  2. ~/.zshenv
  3. /etc/zプロファイル
  4. ~/.zprofile
  5. /etc/zshrc
  6. ~/.zshrc
  7. /etc/zログイン
  8. ~/.zログイン
  9. ~/.zlogout
  10. /etc/zlogout

これらのファイルのいくつかは、非対話型シェルスクリプトとして実行されるときなどの特定の状況では評価されませんが、ここではこれについては説明しません。興味があれば、ZSHのマニュアルページにあります。

$ man zsh

/etc/zprofile走っている点は注目に値する。後ろに ~/.zshenvしたがって、ZSHガイドに従って.zshenvに設定した場合、この問題が発生した場合は、名前を変更してシステムをすばやく設定することをお勧めします$PATHpath_helper/etc/zprofile/etc/zshenv$PATH

答え2

これは言及されbashましたが。zsh

デフォルト値は次のとおりです。bashコンパイル時に決定されます。スタートアップファイルで変更できますが、スタートアップファイルには設定されません。

FedoraおよびRed Hat Enterprise Linux実用ガイド:第7版。 p359。

編集する

もう少し詳しく調べたところ、デフォルトはPATH実際にコンパイル中に設定され、次に見つかることがわかりました。初期化プログラム文書。

/* 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;

編集2:

私はfreenodeからzsh IRCにアクセスし、開発者はビルド中にPATHが設定されたことを示す4つのコマンドのリストを提供できました。私はこのコマンドを拡張チャットに投稿しましたが、X時間が経過するとコマンドが失われるという事実に気づいていませんでした。自分で見たい場合は、IRC開発者にデモを依頼してください。

関連情報