$ PATHは(osx)から値をどこで取得しますか?

$ PATHは(osx)から値をどこで取得しますか?

$ PATHを入力すると、値のリストにPythonフレームワークの一部/etc/pathsとそのリンクも表示されます。/etc/paths.dこれらはどこで読まれますか?

答え1

コンピュータにログインすると、loginwindow.appは、、、、、および$HOMEを含むデフォルトの$SHELL環境を設定します。デーモンまたはエージェントを起動して環境を変更することもできます。あるいは、拡張によって通常、PATH変数はカーネル内のハードコーディングされたPATH変数に設定されます。$TMPDIR$LOGNAME$USER$PATHlaunchd

sysctl user.cs_path
user.cs_path: /usr/bin:/bin:/usr/sbin:/sbin

ターミナルエミュレータを起動すると、デフォルトで呼び出されますloginlogin -pf <yourname>まだ設定されていない環境変数のみが設定されます(参考資料を参照man login)。

その後、シェルは$SHELL呼び出しからそのファイルを読み込みます。設定されたPATH変数を取得、読み込み、現在のPATHから重複項目を削除し、PATH変数を設定どおりに並べ替え、その中のファイルを読み込み、そのファイルをPATH変数に追加し、元のPATHへの任意のパスを追加してください。追加されていない../etcpath_helperpath_helper/etc/paths/etc/paths/etc/paths.d

最後に、$ SHELLはホームディレクトリにあるログインシェルに対応するrcファイルを読み込みます。

答え2

デフォルトでは、呼び出されたプログラムはpath_helperさまざまなシェルのrcファイルで/etc/*実行されます。

$ grep path_helper /etc/* 2>/dev/null
/etc/csh.login:#if ( -x /usr/libexec/path_helper ) then
/etc/csh.login:#    eval `/usr/libexec/path_helper -c`
/etc/profile:#if [ -x /usr/libexec/path_helper ]; then
/etc/profile:#  eval `/usr/libexec/path_helper -s`
/etc/zprofile:#if [ -x /usr/libexec/path_helper ]; then
/etc/zprofile:# eval `/usr/libexec/path_helper -s`
$ 

これは明らかにいいえデフォルトは無効にしpath_helperて、PATH私のrcファイルで管理しました。

関連情報