在OS X上设置环境变量
在OSX中修改环境变量(如PATH)的正确方法是什么?
我稍微看了一下Google,发现需要编辑三个不同的文件:
- / etc /路径
- 〜/ .profile
- 〜/ .tcshrc
我什至没有这些文件,而且我很确定.tcshrc是错误的,因为OSX现在使用bash。这些变量(尤其是PATH)在哪里定义?
我正在运行OSXv10.5(Leopard)。
解决方案
最高包括OSXv10.7(Lion),我们可以在以下位置进行设置:
~/.MacOSX/environment.plist
看:
- https://developer.apple.com/legacy/library/qa/qa1067/_index.html
- https://developer.apple.com/library/content/documentation/MacOSX/Conceptual/BPRuntimeConfig/Articles/EnvironmentVars.html
对于终端机中的PATH,我们应该可以在.bash_profile
或者.profile
中进行设置(不过我们可能必须创建它)
对于OSXv10.8(Mountain Lion)及更高版本,我们需要使用launchd
和launchctl
。
Bash的任何启动文件-〜/ .bashrc
,〜/ .bash_profile
,〜/ .profile
。对于GUI应用程序中的环境变量,还有一个名为〜/ .MacOSX / environment.plist
的怪异文件。
对于单个用户修改,请使用列出的内容中的〜/ .profile。以下链接说明了Bash何时读取其他文件。
http://telin.ugent.be/~slippens/drupal/bashrc_and_others
如果要为gui应用程序设置环境变量,则需要〜/ .MacOSX / environment.plist文件
好吧,我不确定/ etc / paths
和~~ ..MacOSX / environment.plist`文件。那些是新的。
但是使用Bash,我们应该知道.bashrc
是在每次新的Shell调用时执行的
和.bash_profile
仅在启动时执行一次。
我不知道MacOSX多久使用一次。我认为这种区别已经随着窗口系统启动所有东西而中断了。
就个人而言,我通过创建需要的所有内容的.bashrc
文件来消除混乱,然后执行以下操作:
ln -s .bashrc .bash_profile
有时,所有先前的答案都根本无效。如果我们想在Eclipse或者IntelliJ IDEA中访问系统变量(例如" M2_HOME"),则在这种情况下唯一适合我的方法是:
首先(步骤1)编辑/ etc / launchd.conf
以包含如下一行:" setenv VAR value",然后(步骤2)重新启动。
仅仅修改.bash_profile是行不通的,因为在OSX中,应用程序无法像在其他Unix中那样启动。它们不继承父级的shell变量。所有其他修改由于我不知道的原因而无法使用。也许其他人可以对此进行澄清。
布鲁诺是正确的。我已经进行了广泛的研究,如果我们想设置所有GUI应用程序中都可用的变量,则唯一的选择是/ etc / launchd.conf
。
请注意,environment.plist不适用于通过Spotlight启动的应用程序。史蒂夫·塞克斯顿(Steve Sexton)在此处对此进行了记录。
- 打开终端提示
- 输入
sudo vi / etc / launchd.conf
(注意:此文件可能尚不存在) - 将如下内容放入文件中
# Set environment variables here so they are available globally to all apps # (and Terminal), including those launched via Spotlight. # # After editing this file run the following command from the terminal to update # environment variables globally without needing to reboot. # NOTE: You will still need to restart the relevant application (including # Terminal) to pick up the changes! # grep -E "^setenv" /etc/launchd.conf | xargs -t -L 1 launchctl # # See http://www.digitaledgesw.com/node/31 # and http://stackoverflow.com/questions/135688/setting-environment-variables-in-os-x/ # # Note that you must hardcode the paths below, don't use environment variables. # You also need to surround multiple values in quotes, see MAVEN_OPTS example below. # setenv JAVA_VERSION 1.6 setenv JAVA_HOME /System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home setenv GROOVY_HOME /Applications/Dev/groovy setenv GRAILS_HOME /Applications/Dev/grails setenv NEXUS_HOME /Applications/Dev/nexus/nexus-webapp setenv JRUBY_HOME /Applications/Dev/jruby setenv ANT_HOME /Applications/Dev/apache-ant setenv ANT_OPTS -Xmx512M setenv MAVEN_OPTS "-Xmx1024M -XX:MaxPermSize=512m" setenv M2_HOME /Applications/Dev/apache-maven setenv JMETER_HOME /Applications/Dev/jakarta-jmeter
- 在vi中保存所做的更改,然后重新启动Mac。或者使用上面的代码注释中显示的
grep
/xargs
命令。 - 通过打开终端窗口并键入
export
来证明变量正在工作,并且我们应该看到新的变量。这些功能还将在IntelliJ IDEA和我们通过Spotlight启动的其他GUI应用程序中提供。
我们可以使用launchctl setenv
来设置启动的环境(以及扩展名,从Spotlight开始的任何东西)。例如设置路径:
launchctl setenv PATH /opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin
或者,如果我们想在.bashrc或者类似文件中设置路径,则将其镜像到launchd中:
PATH=/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin launchctl setenv PATH $PATH
无需重新启动,尽管如果我们希望应用程序选择更改后的环境,则需要重新启动它。
这包括已经在Terminal.app下运行的所有shell,尽管如果我们在那里,则可以更直接地设置环境,例如使用export PATH = / opt / local / bin:/ opt / local / sbin:$ PATH
用于bash或者zsh。
要在重启后保留更改,我们可以从/ etc / launchd.conf
中设置环境变量,如下所示:
setenv PATH /opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin
重新启动后,会自动执行launchd.conf
。
如果我们希望这些更改现在生效,则应使用此命令重新处理launchctl.conf
(感谢@mklement提示!)
egrep -v '^\s*#' /etc/launchd.conf | launchctl
我们可以找到更多有关launchctl
及其如何使用man launchctl
命令加载launchd.conf
的信息。
我认为OP正在寻找一种简单的,类似于Windows的解决方案。
干得好:
http://www.apple.com/downloads/macosx/system_disk_utilities/environmentvariablepreferencepane.html