如何为Finder启动的应用程序设置PATH


70

通过Finder启动的应用似乎不遵守设置的PATH .bash_profile。因此,当我尝试从IDE(Intellij)运行代码时,我不再有权访问中的程序/usr/local/bin,该程序通常添加到了终端的路径中。

显然.MacOSX/environment.plist 以前是这样的方法,但在Lion中不再起作用。

如何设置PATHFinder启动的应用程序的?


您确定您接受的解决方案适用于10.8吗?
sorin 2012年

1
@SorinSbarnea(我知道这很旧,但是)我可以使用OSD 10.8.3验证建议的扩展名重启hack时,当前接受的答案对我有效。(不过,我设置了一个不同的环境变量,以防万一。)$PATH
Calrion

另请参见< stackoverflow.com/questions/829749/… >。它几乎是重复的。
菲利普·昆兹

Answers:


38

如果您使用的是10.7而不是10.8,则以下解决方案效果很好:

我在eclipse上遇到了同样的问题,但是现在我在我的菜单中添加了以下内容.bash_profile,然后它起作用了。

export PATH=some_path:another_path
launchctl setenv PATH $PATH

万一您想保留原始路径原样使用

p=$(launchctl getenv PATH)
launchctl setenv PATH /my/new/path:$p

相反(或只是launchctl setenv PATH /my/new/path:$(launchctl getenv PATH))。

注意:更改launchctl PATH直到“重新启动” Dock才会生效。使用以下命令杀死当前的新Dock进程后,它将自动开始:

killall Dock

1
我最终使用:“ launchctl setenv PATH $ PATH”。通过“ $ p”附加现有的launchctl路径最终会在每次打开外壳程序时重复该路径。
咖啡因昏迷2012年

4
在OS X 10.8上不起作用 -在Eclipse和IntelliJ上尝试过- set|grep PATH从它们运行总是会返回PATH=/usr/bin:/bin:/usr/sbin:/sbin
sorin 2012年

1
对我的任何一个都不起作用(10.8.1)
nohillside

4
您可以在运行launchctl以下命令后尝试重新启动扩展坞osascript -e 'tell app "Dock" to quit'。那似乎为我解决了。
伊万·安德鲁斯

2
这对我来说在10.12中有效,但只能一次性使用。重新启动机器后,效果会消失。
Dover8 '17

19

为了回答您对“新”问题的疑问,我决定写另一个答案-因为用示例更容易解释。

在选择的工具(IDE)启动时加载环境变量的一种方式就像可以使用Eclipse一样-我认为您的工具(IDE)中也必须有类似的结构。

如何在日食中完成-https: //stackoverflow.com/questions/829749/launch-mac-eclipse-with-environment-variables-set

(稍微重写一下环境变量)

在Eclipse应用程序包目录中创建一个名为“ eclipse.sh”的空文本文件。 /Applications/eclipse/Eclipse.app/Contents/MacOS

在文本编辑器中打开eclipse.sh并输入以下内容:

#!/bin/sh

. ~/.bash_profile

logger "`dirname \"$0\"`/eclipse"

exec "`dirname \"$0\"`/eclipse" $@

在终端中,设置外壳脚本eclipse.sh的可执行标志,即:

chmod +x /Applications/eclipse/Eclipse.app/Contents/MacOS/eclipse.sh

打开Eclipse.app Info.plist,并将CFBundleExecutable键的值从eclipse更改为eclipse.sh。

MacOS X不会自动检测到Eclipse.app的Info.plist已更改。因此,您需要使用lsregister命令在终端中强制更新LaunchService数据库:

/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -v -f /Applications/eclipse/Eclipse.app

下次从Dock或Finder启动Eclipse.app时,应设置环境变量。


+1可以提供清晰准确的解释,并且在六年后的今天,它仍然适用于High Sierra10.13.x。
dgnuff

16

在OS X 10.10 Yosemite上,我使用了以下命令:

sudo launchctl config user path <my path setting>

请注意,他为所有用户设置了launchtl PATH 。这对于我的用例来说效果很好。请注意,系统将要求您重新引导计算机以使效果生效。


这似乎对登录时重新打开(在关闭时打开)的应用程序的PATH环境变量没有影响。
Brecht Machiels '16

4
这个答案对我有用。具体来说,要访问由Brew管理的可执行文件,我必须sudo launchctl config user path /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin重新启动。
JP

这是为基于Homebrew的应用程序添加/ usr / local / bin的最佳答案。民间请对此答案投票!它也可以在10.11和10.12中工作(本人未在10.13中进行测试)。environment.plist在大多数情况下,无需搞乱。
马克·爱丁顿

这对我
有用,

11

在Mountain Lion上,所有/etc/paths/etc/launchd.conf编辑都不会生效!

苹果的开发者论坛说:

“更改.app本身的Info.plist,使其包含具有所需环境变量的“ LSEnvironment”字典。

〜/ .MacOSX / environment.plist不再受支持。”

因此,我直接编辑了该应用程序Info.plist(右键单击“ AppName.app”(在本例中为SourceTree),然后单击“ Show package contents”)

显示包装内容

并添加了一个新的键/字典对:

<key>LSEnvironment</key>
<dict>
     <key>PATH</key>
     <string>/Users/flori/.rvm/gems/ruby-1.9.3-p362/bin:/Users/flori/.rvm/gems/ruby-1.9.3-p362@global/bin:/Users/flori/.rvm/rubies/ruby-1.9.3-p326/bin:/Users/flori/.rvm/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:</string>
</dict>

(请参阅:Apple的LaunchServicesKeys文档

在此处输入图片说明

现在,应用程序(在我的情况下为SourceTree)使用给定的路径并与git 1.9.3一起使用:-)

PS:当然,您必须调整Path条目以适合您的特定路径需求。


这是真的?我看到很多帖子中的信息相互矛盾,其中有些显然很陈旧,但有些似乎是最近的。我什至没有(在10.8.2上)/etc/launchd.conf。据推测,即使规则没有指出应用程序应该使用他们的Info.plist文件的路径,他们仍然可以使用其他文件- /etc/launchd.conf/etc/paths//etc/paths.d/*,或`〜/ .MacOSX / environment.plist。可以肯定地说,实际上,可以在这些文件中的任何一个中设置Mountain Lion中GUI应用程序的路径吗?
orome

2
在尝试用我的Maverics和eclipse尝试lauchd.conf等/路径后,该Info.plist对我唯一有效。实际上,这还不能立即生效,您需要记住两件事:1. /System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -v -f /Applications/eclipse/Eclipse.app在更改plist之后,按照另一个答案中的说明运行,并且2.在其中添加完整路径,您不能像在配置文件脚本中那样使用现有的PATH。
JaakL 2014年

这适用于Sierra(10.12)。但是仍然需要运行该lsregister命令,如@JaakL所述。
Alastair Harrison

1

在“山狮(10.8.4)”上,$PATH经过特殊处理。launchctl setenv PATH /your/path:/here$PATH随后从Dock或Finder启动的Terminal.app或Emacs.app实例没有任何影响(launchctl setenv SPONG foo效果很好)。也$HOME/.launchd.conf行不通。/etc/launchd.conf这是我发现到处正确设置PATH的唯一方法。不幸的是,一个人不能在$HOME该处使用envar ,因此笔记本电脑/Users/nb/bin上的所有用户都可以使用$PATH。那只是我,所以我不在乎。


您应该发现Terminal进程会使用PATH您设置的值,但是:创建新终端时,它将启动一个登录shell,如果您使用bash /etc/profile,它将执行executes ,并将其初始化PATH为从返回的值/usr/libexec/path_helper。如果选择Shell> New Command…并运行env(不在Shell中),则应该找到的PATH是通过launchd设置的值。
克里斯·佩奇

-1

尝试在〜/ .profile或〜/ .bash_profile或〜/ .zprofile(对于zsh)中设置路径。这对VimR来说对我有用-从扩展坞启动时它不读取PATH,但从终端启动时它却起作用。顺便说一下,我在OSX 10.11上运行。

我对此没有足够的了解,无法很好地解释它为何起作用,在线上有很多关于不同配置文件及其作用的解释:https : //stackoverflow.com/questions/415403/ bashrc-bash配置文件和环境之间的区别是什么

另外,请在此处查看类似的讨论:https : //stackoverflow.com/questions/3344704/path-variable-not-properly-set-in-gvim-macvim-when-it-is-opened-from-the-finder/ 24542893#24542893


这个问题问如何做到这一点从文件是一样的,从Finder中推出,你说你的答案不适合工作,推出了应用程序-我们可以确切地解释为什么它/不工作
user151019

-3

在Mac OS X 10.8.4,Mountain Lion上,路径环境包含此文件中列出的路径:

/etc/paths

您可以使用命令行工具(例如,vim使用以下命令)来编辑此文件:

sudo vim /etc/paths
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.