$PATH 从 (osx) 哪里获取它的值?

$PATH 从 (osx) 哪里获取它的值?

当我输入 $PATH 时,在值列表中我看到一些来自/etc/paths/etc/paths.d,但也有指向 python 框架的链接。它从哪里读取这些内容?

答案1

当您登录到计算机时,loginwindow.app 会设置一个基本环境,其中包括$HOME$SHELL$TMPDIR$LOGNAME$USER$PATH。环境也可以通过启动守护进程或代理来改变。或者通过扩展launchd.通常,PATH 变量设置为内核中的硬编码 PATH 变量。

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

当您启动终端仿真器时,默认情况下,它将调用login-login -pf <yourname>它将仅设置那些尚未设置的环境变量(请参阅 参考资料man login)。

然后您的 shell-读取调用$SHELL中的相应文件。获取已设置的 PATH 变量,读取,删除当前 PATH 中的重复项,并按 中设置的方式对 PATH 变量进行排序,然后读取其中的文件,将这些文件添加到 PATH 变量中,然后添加原始 PATH 中的任何路径,其中还没有添加../etcpath_helperpath_helper/etc/paths/etc/paths/etc/paths.d

最后,您的 $SHELL 会读取主目录中登录 shell 的相应 rc 文件。

答案2

默认情况下,调用的程序path_helper是从各种/etc/*shell rc 文件运行的。

$ 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_helperPATH在我自己的 rc 文件中进行管理。

相关内容