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/profile
bash主要使用脚本?我没有其他Shell的经验,但我认为它们遵循不同的结构?