在Mavericks中设置系统范围的PATH环境变量


41

在以前的OS版本中,可以在其中设置系统范围的PATH环境变量,/etc/launchd.conf以使其可用于所有应用程序(而不仅仅是命令行)。

在Mavericks中,似乎不再使用它。

在特立独行者中还有另一种方法吗?

Answers:


50

优胜美地

/etc/launchd.conf10.10中不再支持。见man launchctl

/etc/launchd.conf文件不再需要在早期引导期间运行的子命令。出于安全考虑,已删除此功能。

例如,您现在可以将此plist保存为~/Library/LaunchAgents/my.startup.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>my.startup</string>
  <key>ProgramArguments</key>
  <array>
    <string>sh</string>
    <string>-c</string>
    <string>launchctl setenv PATH /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
  </array>
  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>

launchctl setenv命令以用户身份运行,因此它仅适用于在用户域中启动的进程。

如果选中“重新登录时重新打开窗口”,则此方法不适用于在登录时重新打开的应用程序。

小牛和更早的

在10.9和更早版本中,您可以运行

echo setenv PATH /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin|sudo tee -a /etc/launchd.conf

然后重新启动以应用更改。

其他方法

/etc/paths并且/etc/paths.d/仅(或主要)应用于外壳。在这些线/etc/paths/etc/paths.d/*被添加到由路径path_helper,这是从运行/etc/profile/etc/zshenv/etc/csh.login。除了shell之外,我不知道会考虑/etc/paths或的其他程序/etc/paths.d/

~/.MacOSX/environment.plist 在10.8中停止工作。


2
是的 它只是默认情况下不存在,但是创建它并设置适当的条目会
有所

在优胜美地上,我发现某些程序似乎看不到PYTHONPATH,该文件是我在/etc/launchd.conf中设置的,并且使用了命令行修复程序(答案的第二段),但似乎不起作用,它只是给了我launchctl错误/帮助消息。
探戈

@Tango我编辑了答案。/etc/launchd.conf已在10.10中删除。
Lri 2014年

我还要补充一点,在玩bash时,我的经验是,在10.10上,launchctl setenv似乎什么都没做。我尝试设置环境变量,然后使用echo检查值,但它们仍未定义。
探戈

1
@Tango运行后退出并重新打开终端应用程序launchctl setenvlaunchctl setenv从未影响现有流程。
Lri 2014年

11

有一种更简单的方法。将文本文件放在文件夹中/etc/paths.d/。在此文本文件中,输入所需的路径和换行符。最好的方法是为每个路径创建一个新文件。

在我的系统上,有一个名为MySQL的文件,其文本为'/ usr / local / mysql / bin'和一个换行符。


我刚刚发布了一个新问题,关于是否有办法解决@LauriRanta描述的弱点。
kuzzooroo 2014年

只是一个轶事:我也使用了这种方法,因为这是推荐的“ OS X方式”。我不太幸运让系统一致地兑现我在/etc/paths.d中拥有的PATH文件,并且通常最终要么使用export shell命令,要么将我的PATH放置在〜/ .bash_profile中,这总是可以的, (仅适用于我当前的用户帐户,而不适用于整个系统)。如果/etc/paths.d路径的文件,总是为你工作,那么我嫉妒你的系统是比我的表现;)
寒冷

这对我来说是新的。真好!
CousinCocaine 2014年

3

您也许可以在文件中设置环境变量/etc/launchd-user.conf...

在Mavericks中,我能够使用以下命令在文件中配置环境变量:

setenv TEST test

重新启动后,$TEST从/etc/launchd-user.conf进行设置。

编辑

/etc/launchd.conf中文件的语法可能无效。您可以发布该文件的内容进行检查吗?

据我所知,在/etc/launchd.conf中设置PATH变量可以正常工作。但是,launchd不执行任何参数扩展。因此,如果您输入setenv PATH $PATH:/usr/local/bin,则结果路径将设置为“ $PATH:/usr/local/bin”(注意:不是PATH 的,而是文本“ $ PATH”)


谢谢,我遇到的问题是设置PATH,其他环境变量似乎也起作用。
汤姆(Tom)

@Tom-我在上方提供了其他建议
Eddie Kelley,

1
是launch-user.conf还是
launch-

包含“ setenv TEST测试”的/etc/launchd.conf不会传播到我的小牛的终端中。
戴夫X

糟糕:s /小牛/优胜美地/。
戴夫X

0

在我的Mavericks安装中,将“ setenv PATH blablabla”添加到/etc/launchd.conf重启后不起作用

所以我在/ etc / paths的末尾添加了新路径,该路径可以正常工作。


它对我不起作用。我重新启动,/etc/paths包含了我想要的所有内容,但是Sublime仍然只看到原始的PATH。如果我从终端运行它,它可以工作。
mgol 2013年

我的/ etc / profile中的path_helper命令使用/ etc / paths和/etc/paths.d覆盖可能由/etc/launchd.conf设置的任何PATH
Dave X

0

我发现setenv PATH仍然适用于我的终端和应用程序,但是破坏了shell脚本,直接通过单击或从Finder在终端中打开来启动。真奇怪 /etc/launchd.conf工作中设置的其他环境变量。

为了修复直接启动的Shell脚本,我在中复制了PATH设置~/.bash_profile


0

编辑/etc/paths.d或使用.bash_profile对我没有用,但是正如其他人建议的那样(我实际上是来这里支持他的答案的,但我找不到它了!!),我编辑了/etc/paths对我有用的

就我而言,我将android-tool adbandroid终端命令添加到指向它们的sdk路径(adb如今已移至另一个目录),如下所示

/usr/local/bin
...
/Applications/adt-bundle-mac/sdk/platform-tools  //new entries
/Applications/adt-bundle-mac/sdk/tools

0

SWEET,将该XML添加到〜/ Library / LaunchAgents / setenv.SVN.plist,允许BBEdit使用我安装在/ opt中的Subversion二进制文件。

<clip>
<string>launchctl setenv PATH /opt/subversion/bin:$PATH</string>
<clip>

1
任何想法如何确定此文件是否支持参数扩展?我可能已经设置了路径,所以/ opt中的一个是唯一的。而且我认为它可能不支持使用$ PATH。您将如何确定现有的开始路径?
Mark M

-1

只需将您的“ bin”(您要添加的路径)路径添加到/ etc / paths文件-重新启动或重新登录!

sudo vi /etc/paths 
(create a file (paths file) if it does't exist, I am using 'vi' editor, you can use your own as super user )
then, add your bin directory path like below 

/usr/local/mysql/bin
/usr/local/apache-ant-1.9.3/bin
/usr/local/gradle-1.11/bin

保存文件并重新登录...希望这会有所帮助

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.