在Mountain Lion中,如何在一个地方为所有新启动的应用程序设置PATH环境变量?


9

在Ask Different上,有很多关于PATH环境变量的问题,以及如何为由Shell,聚光灯或通过Finder启动的应用程序设置环境变量(典型问题:如何为Finder启动的应用程序设置PATH如何更改PATH环境变量。 ..)。

答案范围从sh启动脚本/etc/paths/etc/launchd.conf。在这里,我为Mac OS X Mountain Lion 10.8.2下所有应用程序的统一设置提供了答案PATH

Answers:


14

经过不同选择的多次试验后,我得出以下结论:

是否有统一的方法来设置PATH以不同方式(例如Shell脚本,Finder和Spotlight)启动的应用程序?好吧,是和否:

  • PATH在Shell启动脚本(例如.bashrc)中进行设置仅适用于由Shell启动的应用程序。
  • :对我来说,PATH为当前launchd进程设置launchctl setenv PATH <...>完全无效。
  • :设置PATH/etc/launchd.conf(并重新启动系统)会做出相应的PATH可见的聚光灯下,码头和Finder和随后(本地)弹启动的应用程序。
  • :远程调用的shell 继承环境。(请参阅 ...为什么通过ssh的远程shell无法继承环境。。

外壳设置注意事项:

  1. 为了使本地 Shell中的功能正常运行,重要的是要关闭使用/usr/libexec/path_helper,因为中的默认路径/etc/paths可能会更改PATH。**中路径的顺序。

  2. 为了容纳远程 Shell,您需要将launchd环境重新导入到Shell中。在您的.bashrc

# the vexatious path stuff
eval $(launchctl export)

整个问题的不幸后果是:

  • 无法基于每个用户拥有这些统一设置。(~/.launchd.conf不起作用。)
  • 没有简单的方法可以使用主目录扩展等技术从不同的来源构造PATH。

更新:通过设置PATH /etc/launch.conf没有贝壳工作登录到通过SSH远程(我假设,因为sshd没有通过它从其父继承它的环境launchd到子shell)。-我将相应地编辑答案。
halloleo 2013年

答案已更新为远程外壳解决方案。
halloleo

1
好答案;您可以按照以下步骤简化启动环境的采购:eval "$(launchctl export)"
mklement0

一种简单的编辑方法/etc/launchd.conf是仅运行sudo -e /etc/launchd.conf(如果您熟悉vi)或EDITOR=nano sudo -e /etc/launchd.conf(如果您更喜欢非模式编辑器)。
nohillside

3

扩展上一个答案,要更改中的路径/etc/launchd.conf,您需要执行以下操作。

  1. 确保您具有管理员权限。

  2. 创建具有以下内容的新文本文件,并对其进行修改以适合您的需求:

    setenv PATH /usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/Users/YourUserName/bin
    
  3. 将它保存在你的home目录作为launchd.conf

  4. 打开Terminal.app(或您喜欢的替代品)并输入:

    sudo mv ~/launchd.conf /etc

    根据以前使用该sudo命令的情况,您可能会收到一则简短的“小心操作”消息,但是无论哪种方式,您都需要输入密码。命令的全部作用就是将文件移动到/etc目录中,例如,在TextEdit中保存文件时不能直接访问该目录。sudo(“超级用户DO”的缩写)被使用,因为需要管理员特权才能写入该目录。

  5. 重新启动计算机。

而且你应该准备好了。祝好运!


感谢您提供详细信息,但问题在于如何进行修改launchd.conf,而在于所有应用程序如何以统一的方式获取相同的PATH变量。
halloleo

是的,但我最初搜索的问题是试图找出如何PATH为我的GUI应用程序设置的方法,并且我想我可以帮助任何可怜的人可能都不知道如何实现更改...
MattDMo

您在这里有一个正确的观点;不过,我认为您的信息整合到答案中是更好的选择。-我认为此评论线程已成为元讨论,因此,我已在meta.stackoverflow上打开了它的内容,以解决其他问题……
halloleo 2013年

1
实际上,这不应该在meta.apple.stackexchange.com上吗?
MattDMo

确实,meta.apple.stackexchange.com应该是正确的地方。我只是不知道它的存在...
halloleo

-2

您可以尝试https://github.com/ersiner/osx-env-sync

它从单一来源处理命令行和GUI应用程序。它可以与最新版本的OS X(Yosemite)一起使用。


这只是使用他说不起作用的位来自动化另一个答案,例如,launchctl setenv PATH <...>
user151019

@Mark这与自动执行答案步骤无关。这个使用启动代理。我建议您尝试一下。
Ersin Er

公认的解决方案也使用该launchd系统。您的解决方案与接受的答案中所述的问题相同。
halloleo 2015年

@halloleo您是否真的尝试过?在哪个版本的OS X上?
Ersin Er
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.