Answers:
通常,您的PATH由外壳设置。对于Bash,所有内容均在手册中进行了说明。您也可以打开man bash并跳至INVOCATION零件。
作为交互式登录shell或--login调用
当Bash作为交互式登录shell或使用--login选项作为非交互式shell调用时,它首先从文件/ etc / profile中读取并执行命令(如果该文件存在)。读取该文件后,它将按该顺序查找〜/ .bash_profile,〜/ .bash_login和〜/ .profile,并从存在且可读的第一个命令中读取并执行命令。
作为交互式非登录外壳程序调用
启动不是登录外壳程序的交互式外壳程序时,如果该文件存在,则Bash从〜/ .bashrc读取并执行命令。另外,在OS X中,
path_helper可以读取其中的内容/etc/paths.d并将其附加到路径中。
此处的关键是,在OS X上,终端默认情况下会打开登录外壳,而在Linux上,外壳通常作为非登录外壳启动。Josh Staiger 对登录和非登录shell都有很好的解释。
因此,实际上只有这两个三个可以设置路径:
/etc/profile(调用path_helper)/etc/paths和/etc/paths.d(从调用path_helper).bash_profile)/etc/profile被大多数(所有?不是100%确定)弹使用。这就是为什么将它放在您想要的任何地方(例如PATH)的好选择。Bash读取.bash_文件,而Zsh则读取.zshrc其他文件。这取决于外壳。
path_helper是不是叫交互式非登录shell(也非交互shell)。/etc/profile实际上,它被称为交互式登录外壳。
/etc/paths和/etc/paths.d/*中的路径通常PATH由path_helper添加。path_helper是从开始运行的/etc/profile,因此,在将bash作为交互式登录shell调用时运行,而在将bash作为非登录shell或非交互式shell调用时则不运行。
/etc/paths/usr/local/bin默认情况下包含结尾,默认情况下/etc/paths.d/为空。
Terminal和iTerm 2默认情况下会打开新的外壳程序作为登录外壳程序,而ssh到计算机时打开的外壳程序也是登录外壳程序。但是,其他平台上的许多终端模拟器tmux,以及Emacs中的shell模式都将新的shell作为非登录shell打开。
我已将此行添加到/etc/launchd.conf:
setenv PATH ~/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/libexec:/usr/texbin
它更改了PATH根启动进程的值。该值被所有其他进程(包括按用户启动的进程)继承。您可以/etc/launchd.conf通过重新启动或运行launchctl < /etc/launchd.conf; sudo launchctl < /etc/launchd.conf并重新启动进程来应用更改。
在OS X上,~/.profile以图形方式登录时不会读取。如果同时~/.bash_profile和~/.profile存在,bash将不读~/.profile无论是。
~/.MacOSX/environment.plist 在10.8中停止工作。
/etc/profilebash主要使用脚本?我没有其他Shell的经验,但我认为它们遵循不同的结构?