Mac OS X 如何设置 $PATH 的值?

Mac OS X 如何设置 $PATH 的值?

我对如何设置 $PATH 有基本的了解,但是有没有文档可以完整描述 Mac OS 获取全部附加到 $PATH 的路径?我知道诸如 、 和 之类的东西/etc/profile/etc/paths但是/etc/profile.d还有其他脚本最终会影响 $PATH 的值吗?我也不太熟悉非登录 shell 和登录 shell(.bashrc.bash_profile),但我知道它们的基本区别。

答案1

通常,你的 PATH 由 shell 设置。对于 Bash,一切都是手册中有说明。您也可以打开man bash并跳至该INVOCATION部分。

作为交互式登录 shell 调用,或者使用 --login

当 Bash 作为交互式登录 shell 或使用 --login 选项作为非交互式 shell 调用时,它首先从文件 /etc/profile 中读取并执行命令(如果该文件存在)。读取该文件后,它会按顺序查找 ~/.bash_profile、~/.bash_login 和 ~/.profile,然后从第一个存在且可读的文件中读取并执行命令。

作为交互式非登录 shell 调用

当启动非登录 shell 的交互式 shell 时,Bash 会从 ~/.bashrc(如果该文件存在)读取并执行命令。在 OS X 中,此外还有path_helper它读取内容/etc/paths.d并将其附加到您的路径。

这里的关键是,在 OS X 上,终端默认打开登录 shell,而在 Linux 上,shell 通常以非登录 shell 的形式启动。Josh Staiger 有关于登录和非登录 shell 的详细解释

因此,基本上只有这两个三个可以设置路径:

  • /etc/profile(调用path_helper
  • /etc/paths/etc/paths.d(调用自path_helper
  • 你的 shell 配置文件 ( .bash_profile)

答案2

/etc/paths和中的路径/etc/paths.d/*通常PATH路径助手.path_helper从 运行/etc/profile,因此当 bash 作为交互式登录 shell 调用时它会运行,但是当 bash 作为非登录 shell 或非交互式 shell 调用时它不会运行。

/etc/paths默认包含/usr/local/bin在末尾,并且/etc/paths.d/默认为空。

终端和 iTerm 2 默认打开新 shell 作为登录 shell,当您通过 ssh 连接到计算机时打开的 shell 也是登录 shell。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 中停止工作。

相关内容