协慌网

登录 贡献 社区

在 OS X 上设置环境变量

在 OS X 中修改 PATH 等环境变量的正确方法是什么?

我在 Google 上看了一下,发现要编辑的三个不同文件:

  • 的 / etc / 路径
  • 〜/ .profile 文件
  • 〜/ .tcshrc 文件

我甚至没有这些文件,我很确定.tcshrc是错误的,因为 OS X 现在使用 bash。这些变量,尤其是 PATH,在哪里定义?

我正在运行OS X v10.5 (Leopard)。

答案

布鲁诺正好走上正轨。我做了大量的研究,如果你想设置所有 GUI 应用程序中可用的变量,你唯一的选择是/etc/launchd.conf

请注意, environment.plist 不适用于通过 Spotlight 启动的应用程序。 Steve Sexton 在此记录了这一点

  1. 打开终端提示

  2. 输入sudo vi /etc/launchd.conf (注意:此文件可能尚不存在)

  3. 将以下内容放入文件中

    # 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
  4. 将更改保存在 vi 中并重新启动 Mac。或者使用上面代码注释中显示的grep / xargs命令。

  5. 通过打开终端窗口并键入export证明您的变量正常工作,您应该看到新的变量。这些也可以在您通过 Spotlight 启动的 IntelliJ IDEA 和其他 GUI 应用程序中使用。

如何为 Spotlight 启动的新进程设置环境(无需重启)

您可以使用launchctl setenv设置 launchd(以及扩展名为 Spotlight 启动的任何内容)使用的launchctl setenv 。例如,设置路径:

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 for 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

您可以使用命令man launchctl找到有关launchctl及其如何加载launchd.conf更多信息。

OS X v10.7 (Lion)中,您可以将它们设置为:

~/.MacOSX/environment.plist

看到:

对于终端中的 PATH,您应该能够设置.bash_profile.profile (您可能必须创建它)

对于OS X v10.8 (Mountain Lion)及更高版本, 您需要使用launchdlaunchctl