当我输入 $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 中的任何路径,其中还没有添加../etc
path_helper
path_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_helper
并PATH
在我自己的 rc 文件中进行管理。