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


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

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

到目前为止我找到的唯一方法是重新定义PATH环境变量 /etc/launchd.conf

setenv PATH /usr/bin:/bin:/usr/sbin:/sbin:/my/path

我无法找到一种实际附加到PATH的方法 launchd.conf

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


97
2018-05-31 19:08




看到: stackoverflow.com/questions/347286 - rjmunro
对于约塞米蒂以及稍后,请参阅 stackoverflow.com/questions/25385934/... - thSoft
这里的答案都没有解决OP的问题。但是,thSoft在这里的评论是正确的钱!也许这应该合并或链接到引用的问题: stackoverflow.com/questions/25385934/... - Kevin Buchs


答案:


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

70
2018-05-28 06:53



很好,谢谢!注意:这要求您在注册之前注销并重新登录。 - weronika
@weronika:我发现退出并重新启动就足够了 X11 (比完全记录更痛苦)。我没试过 Terminal。 - Peter Gluck
我指的是终端 - 你是对的,我忘了指明。 - weronika
这很有用,但它没有回答OP的问题,因为这种机制不适用于GUI应用程序。 OP正在寻找一个 统一 允许他的解决方案 附加 到默认值 $PATH。 - mklement
你的“我的系统”是什么意思,@ cogg?我们不是都在使用OS X吗?抱歉,我还是OS X的新手。我使用的是OS X 10.7 - ericn


/etc/launchd.conf

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

sudo touch /etc/launchd.conf
sudo nano /etc/launchd.conf

setenv PATH /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin

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

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

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

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

这个答案基于同样的问题 在Mac OS X上设置环境变量


47
2018-06-04 20:30



很好的发现,但问题已经谈到了 的launchd 并询问如何 附加 到它的路径。 - cregox
您是否真的在原始问题上添加评论,将自己称为“真正的答案”? - TJ Luoma
这是你的 - 有用的答案暗示的,但只是拼出来:OP的愿望 附加 不支持默认路径,因为您无法引用其他环境变量 /etc/launchd.conf。 - mklement
它不是全局的 - 当/ etc / profile调用path_helper并从/ etc / paths和/etc/paths.d/重建PATH时,命令行环境将丢弃它 - Dave X
根据 apple.stackexchange.com/questions/106355/...,这对优胜美地或以后不再有效 - ericn


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

试着这样做 launchctl 不起作用,因为环境变量是在登录时设置的;它们在shell会话之外的Unix系统中不存在。

所以你想要添加

setenv PATH "$PATH:/add/my/extra/path"

/etc/csh.cshrc 和

export PATH="$PATH:/more/paths:/

/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>

更多关于 environment.plist  在Apple的网站上


7
2018-06-01 12:24



但是设置在/etc/launchd.conf中设置时生效...嗯... /我很困惑。 - Xerxes
真?你在那里设置了什么环境变量? - palmer
只是OS X 10.8的更新: ~/.MacOSX/environment.plist 不再支持方法,并且在用户级别没有替代方法。您可以使用全系统 /etc/launchd.conf (并且有一个每个* .app解决方案)。 - mklement
不回答OP的问题。 - Kevin Buchs


您可以通过添加行来编辑全局路径 /etc/paths,每行一条路径。

sudo nano /etc/paths 应该让你到那儿。


3
2017-09-03 18:04



这很有用,但它没有回答OP的问题,因为这种机制不适用于GUI应用程序。 - mklement


你有没有看过的手册页 path_helper OS X上的命令行实用程序?我回答了一个 关于SO的一些相关问题 我认为你可能会觉得有帮助。


1
2018-06-01 12:50





我不确定是否有人覆盖 最简单的 而且大多数 优雅 办法。至少在 的Mac OS X v10.6中 (Snow Leopard)上。

弄乱了 [/etc/|~/.] 的 [profile|bashrc] 文件可能会工作,但它有点像黑客。该 /etc/paths.d/ 目录是要走的路:

  • Sudo进入你最喜欢的编辑器。
  • 创建一个名为的新文件 *name* (只是不要说它已经存在的东西) /etc/paths.d/ 每行一条路径:

    /usr/X11/bin
    /Developer/usr/bin
    
  • 然后加

    eval '/usr/libexec/path_helper -s`
    

    profile 要么 bashrc,你应该好好去。


1
2018-01-31 07:22



这很有用,但它没有回答OP的问题,因为这种机制不适用于GUI应用程序。 - mklement
字面意思是文件名 *name*?或者你的意思是 name? - Peter Mortensen


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

setenv PATH“$ PATH:/ my / path”

0
2018-05-31 19:26



不幸的是,这不起作用。它看起来不像launchctl那样容易访问环境变量。有一个获取环境变量的命令,但绝对没有关于如何使用它的文档。 - lajos