如何在 OS X 上设置全局 PATH 环境变量?

laj*_*jos 103 mac-osx path

我想附加到 OS X 上的全局 PATH 环境变量,以便所有用户 shell 和 GUI 应用程序获得相同的 PATH 环境。

我知道我可以附加到 shell 启动脚本中的路径,但是 GUI 应用程序不会继承这些设置。

到目前为止,我发现的唯一方法是在/etc/launchd.conf 中重新定义 PATH 环境变量:

setenv PATH /usr/bin:/bin:/usr/sbin:/sbin:/my/path
Run Code Online (Sandbox Code Playgroud)

我想不出一种方法来实际附加到 PATH 中的launchd.conf.

我有点担心这种方法,但到目前为止,这是唯一有效的方法。有没有更好的办法?

小智 73

palmer 的GUI 信息是正确的,但是有一个更易于维护的方法来修改shell 看到的路径。就像mediaslave 所说的那样,您可以编辑/etc/paths,但更好的是您可以将一个文本文件放入其中/etc/paths.d/,其中包含一个路径,并且所有 shell 都会正确构建路径。

例如,在我的系统上:

$ cat /etc/paths
/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin
$ ls /etc/paths.d
X11       git      postgres
$ cat /etc/paths.d/postgres
/Library/PostgreSQL/8.4/bin
$ echo $PATH
/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/git/bin:/Library/PostgreSQL/8.4/bin:/usr/X11/bin:/usr/local/mysql/bin
Run Code Online (Sandbox Code Playgroud)

  • 很高兴知道这一点,但它没有回答 OP 的问题,因为此机制不适用于 GUI 应用程序。OP 正在寻找一个*统一*的解决方案,允许他*附加*到默认的`$PATH`。 (10认同)

sor*_*rin 49

/etc/launchd.conf

launchd.conf文件是 ** 唯一适用于OS X v10.8 (Mountain Lion) 和v10.9 (Mavericks)上的命令行和 GUI 应用程序的完整解决方案,适用于所有用户的 GUI 和控制台应用程序.

sudo touch /etc/launchd.conf
sudo nano /etc/launchd.conf
Run Code Online (Sandbox Code Playgroud)

添加

setenv PATH /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,我添加/usr/local/bin了 PATH 的默认环境值。

请记住,此文件不是脚本,您无法选择使用替换。此外,要应用这些,您需要重新启动。

请记住,所有其他解决方案都只是部分解决方案:

  • environment.plist 不适用于通过 Spotlight 启动的应用程序。
  • /etc/paths - 仅用于控制台
  • /etc/csh.cshrc/etc/bashrc- 仅适用于某些外壳

此答案基于在 Mac OS X 上设置环境变量中的相同问题。

  • 您是否真的在原始问题中添加了一条评论,指出您自己是“真正的答案”? (22认同)
  • 很棒的发现,但问题已经讨论了 *launchd* 并询问如何**附加**到其中的路径。 (7认同)
  • 您的 - 有帮助的 - 答案暗示了这一点,但只是为了说明:不支持 OP 将*附加*到默认路径的愿望,因为您无法在`/etc/launchd.conf` 中引用其他环境变量。 (7认同)
  • 根据 http://apple.stackexchange.com/questions/106355/setting-the-system-wide-path-environment-variable-in-mavericks,这不再适用于优胜美地或更高版本 (2认同)

pal*_*mer 7

您将不得不逐个外壳地设置它;Bash 和类似 csh 的 shell 不共享用于调整 PATH 的相同配置文件和语法。

尝试这样做是launchctl行不通的,因为在登录时设置了环境变量;在 shell 会话之外,它们在 Unix 中不存在于系统范围内。

所以你要添加

setenv PATH "$PATH:/add/my/extra/path"
Run Code Online (Sandbox Code Playgroud)

/etc/csh.cshrc

export PATH="$PATH:/more/paths:/
Run Code Online (Sandbox Code Playgroud)

/etc/bashrc

如果您想在 GUI 应用程序中使用环境变量,那就更复杂了。您必须.MacOSX/environment.plist在每个用户的主目录中创建一个文件。.MacOSX默认情况下,该目录可能不存在,因此您必须创建它。

文件的格式是这样的:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>

    <key>PRINTER</key>
    <string>myprinter</string>

    <key>PATH</key>
    <string>/path/to/thing/I/need</string>

    <key>DISPLAY</key>
    <string>0:1</string>

</dict>
</plist>
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请environment.plist 访问 Apple 网站

  • 只是 OS X 10.8 的更新:不再支持`~/.MacOSX/environment.plist` 方法,并且在用户级别没有替代品。您可以在系统范围内使用`/etc/launchd.conf`(并且有一个 per-*.app 解决方案)。 (2认同)

use*_*686 0

我不确定 launchd 是否接受这一点,但请尝试:

setenv PATH“$PATH:/我的/路径”