Setting environment variables in OS X?

What is the proper way to modify environment variables like PATH in OSX? I've looked on Google a little bit and found 3 different files to edit:

  • /etc/paths
  • ~/.profile
  • ~/.tcshrc
  • I don't even have some of these files, and I'm pretty sure that .tcshrc is wrong, since OSX uses bash now. Anybody have any idea where these variables, especially PATH, are defined?

    Edit: I'm running OS X 10.5


    Bruno is right on track. I've done extensive research and if you want to set variables that are available in all GUI apps, your only option is /etc/launchd.conf

    Please note that environment.plist does not work for applications launched via Spotlight. This is documented by Steve Sexton here.

    1) Open a terminal prompt

    2) Type sudo vi /etc/launchd.conf (note: this file might not yet exist)

    3) Put contents like the following into the file

    # 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 enviroment 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) Save your changes in VI and reboot your Mac. Or use the grep/xargs command which is shown in the code comment above.

    5) Prove that your variables are working by opening a Terminal window and typing export and you should see your new variables. These will also be available in IntelliJ and other GUI apps you launch via Spotlight.


    How to set the environment for new processes started by Spotlight (without needing to reboot)

    You can set the environment used by launchd (and, by extension, anything started from Spotlight) with launchctl setenv . For example to set the path:

    launchctl setenv PATH /opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin
    

    Or if you want to set up your path in .bashrc or similar, then have it mirrored in launchd:

    PATH=/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin
    launchctl setenv PATH $PATH
    

    There's no need to reboot though you will need to restart an app if you want it to pick up the changed environment.

    This includes any shells already running under Terminal.app, although if you're there you can set the environment more directly, eg with export PATH=/opt/local/bin:/opt/local/sbin:$PATH for bash or zsh.

    How to keeping changes after a reboot

    To keep changes after a reboot you can set the environment variables from /etc/launchd.conf , like so:

    setenv PATH /opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin
    

    launchd.conf is executed automatically when you reboot.

    If you want these changes to take effect now, you should use this command to reprocess launchctl.conf (thanks @mklement for the tip!)

    egrep -v '^s*#' /etc/launchd.conf | launchctl
    

    You can find out more about launchctl and how it loads launchd.conf with the command man launchctl .


    Up to and including Lion (10.7) you can set them in

    ~/.MacOSX/environment.plist

    See:

  • https://developer.apple.com/legacy/library/qa/qa1067/_index.html
  • https://developer.apple.com/library/content/documentation/MacOSX/Conceptual/BPRuntimeConfig/Articles/EnvironmentVars.html
  • For PATH in the Terminal, you should be able to set in .bash_profile or .profile (you'll probably have to create it though)

    For Mountain lion and beyond you need to use launchd and launchctl

    链接地址: http://www.djcxy.com/p/25568.html

    上一篇: 修正Bash和shell脚本可变大小写

    下一篇: 在OS X中设置环境变量?