我想在OS X上附加全局PATH环境变量,以便所有用户Shell和GUI应用程序都具有相同的PATH环境。

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

到目前为止,我发现的唯一方法是在/etc/launchd.conf中重新定义PATH环境变量: br />
我找不到在launchd.conf中真正附加到PATH的方法。

我对此方法有点担心,但是到目前为止,这是唯一的作品。有更好的方法吗?

评论

请参阅:stackoverflow.com/questions/347286

对于优胜美地及更高版本,请参见stackoverflow.com/questions/25385934/…

这里没有任何答案可以解决OP的问题。但是thSoft在这里发表的评论对金钱是正确的!也许应该将其合并或链接到所引用的问题:stackoverflow.com/questions/25385934/…

#1 楼

palmer的GUI信息是正确的,但是有一种更可维护的方法来修改外壳程序看到的路径。就像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


评论


很好,谢谢!注意:这要求您先注销然后重新登录,然后再运行。

–weronika
13年1月4日在21:14

@weronika:我发现退出并重新启动X11就足够了(比完全注销更痛苦)。我没有在Terminal中尝试过。

– Peter Gluck
13年2月28日在22:18

我指的是终端-您是对的,我忘记指定了。

–weronika
13年1月1日在1:42

很高兴知道这一点,但是它不能回答OP的问题,因为该机制不适用于GUI应用程序。 OP正在寻找一个统一的解决方案,以允许他附加到默认的$ PATH。

–mklement
13年5月31日在19:15

@cogg,这里的“我的系统”是什么意思?我们不是都在这里使用OS X吗?抱歉,我仍然不熟悉OSX。我使用的是OS X 10.7

–ericn
2013年6月1日上午9:37

#2 楼

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

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


添加

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


在上面的示例中我将launchd.conf添加到PATH的默认环境值中。请注意,该文件不是脚本,您没有使用替代项的选项。另外,要应用这些功能,您需要重新启动。

请记住,所有其他都只是部分解决方案:通过Spotlight启动。

/usr/local/bin-仅适用于控制台

environment.plist/etc/paths-仅适用于某些外壳

此答案基于来自在Mac OS X上设置环境变量。

评论


很好的发现,但是这个问题已经讨论了启动,并且正在询问如何附加到其中的路径。

– Cregox
2011年7月11日下午0:16

您是否真的在原始问题上添加了注释,称自己为“真正的答案”?

– TJ Luoma
2011-12-09 20:21

您的-有用-的答案暗示了这一点,但仅说明了这一点:不支持OP附加到默认路径的愿望,因为您无法在/etc/launchd.conf中引用其他环境变量。

–mklement
13年5月31日在19:27

它不是全局的-当/ etc / profile调用path_helper并从/ etc / paths和/etc/paths.d/重建PATH时,命令行环境将放弃此设置。

–戴夫X
15年3月31日在20:54

根据apple.stackexchange.com/questions/106355/…的说法,这不再适用于优胜美地或更高版本

–ericn
15年7月22日在6:32

#3 楼

您将必须逐个外壳地进行设置; Bash和类似csh的外壳程序不会共享相同的配置文件和用于调整PATH的语法。

launchctl中尝试执行此操作将不起作用,因为在登录时设置了环境变量;它们在Shell会话之外的Unix系统中不存在。

所以您要在/etc/csh.cshrc中添加

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




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网站。

评论


但是,当在/etc/launchd.conf中设置时,这些设置才会生效。

– Xerxes
2009年6月1日14:59

真?您在那里设置了什么环境变量?

–palmer
09年6月1日在16:07

从OS X 10.8开始只是一个更新:〜/ .MacOSX / environment.plist方法不再受支持,并且在用户级别没有替代品。在系统范围内,您可以使用/etc/launchd.conf(并且有一个基于* .app的解决方案)。

–mklement
13年5月31日在19:24

不回答OP的问题。

–凯文·布赫斯(Kevin Buchs)
17年12月22日在18:47

#4 楼

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

sudo nano /etc/paths应该可以到达那里。

评论


知道这很高兴,但是它不能回答OP的问题,因为该机制不适用于GUI应用程序。

–mklement
13年5月31日在19:20

#5 楼

您是否看过OS X上path_helper命令行实用程序的手册页?我在SO上回答了一个相关问题,我认为您可能会有所帮助。

#6 楼

我不确定是否有人涵盖了最简单,最优雅的方式。至少在Mac OS X v10.6(Snow Leopard)上有效。可以使用[/etc/|~/.]目录:


将Sudo放入您喜欢的编辑器中。

创建一个名为[profile|bashrc]的新文件(只是不要命名为已存在于/etc/paths.d/中,每行有一个路径:

/usr/X11/bin
/Developer/usr/bin



然后添加

eval '/usr/libexec/path_helper -s`


*name*/etc/paths.d/,您应该会很方便。



评论


知道这很高兴,但是它不能回答OP的问题,因为该机制不适用于GUI应用程序。

–mklement
13年5月31日在19:19



文件名实际上是* name *吗?还是只说名字?

– Peter Mortensen
18年8月26日在19:10

#7 楼

我不确定启动是否接受此方法,但请尝试:

setenv PATH "$PATH:/my/path"


评论


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

– lajos
09年6月1日,下午3:18

#8 楼

我不确定您为什么要使用/etc/launchd.conf而不是/etc/profile-但我不是Mac OS X专家-我相信您肯定可以使用,但launchd是Mac OS X的实现/替换init-Mac OS X使我感到困惑。

无论如何,setenv PATH "$PATH:/more/paths:/and/more/paths"可以正常工作(tcsh),并且bourn shell等效为export PATH="$PATH:/more/paths:/and/more/paths"-我也不知道launchd与特定的shell有何关系。 >
我想我问了更多问题,然后我回答了=)

评论


/ etc / profile路径设置在任何OS X GUI应用程序中均看不到。这仅适用于bash。我希望所有应用程序都获得新的路径设置。

– lajos
09年6月1日在4:36

Unix?当然,这是unix。我的意思是是的,我们破坏了已经使用了30年的东西,但它仍然是unix! /叹

–马特·西蒙斯(Matt Simmons)
2009年6月1日12:48