为了账号安全,请及时绑定邮箱和手机立即绑定

在OSX上设置环境变量

/ 猿问

在OSX上设置环境变量

一只萌萌小番薯 2019-05-30 10:23:57

在OSX上设置环境变量

在OSX中修改环境变量(如PATH)的正确方法是什么?

我看了一下Google,找到了三个可以编辑的文件:

  • /ETC/路径
  • ~/.剖面
  • ~/.

我甚至没有这些文件,我很确定.tcshrc是错误的,因为OSX现在使用bash。这些变量,特别是路径,是在哪里定义的?

我在跑OSX V10.5(豹)


查看完整描述

4 回答

?
慕的地6264312

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

请注意plist不适用于通过Spotlight启动的应用程序。这是斯蒂夫塞克斯顿在这里记录的。.

  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你应该看看你的新变量。这些也可以在IntelliJIDEA和通过Spotlight启动的其他GUI应用程序中获得。


查看完整回答
反对 回复 2019-05-30
?
繁花不似锦

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

您可以通过以下方式设置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为巴什或兹什。

如何在重新启动后保持更改

重新启动后保持更改可以将环境变量设置为/etc/launchd.conf,就像这样:

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

launchd.conf在重新启动时自动执行。

如果希望这些更改立即生效,则应使用此命令重新处理。launchctl.conf(谢谢你的小费!)

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

你可以找到更多关于launchctl以及它是如何装载的launchd.conf用命令man launchctl.


查看完整回答
反对 回复 2019-05-30
?
翻过高山走不出你

直至并包括OS X v10.7(狮子)你可以设置它们:

~/.MacOSX/environment.plist

见:

对于终端中的路径,您应该能够设置.bash_profile.profile(您可能需要创建它)

OS X v10.8(山狮)及更远 你需要用launchdlaunchctl.


查看完整回答
反对 回复 2019-05-30
?
慕虎7371278

来自单一来源的命令行和GUI应用程序的解决方案(与Yosemite&El Capitan一起工作)

让我们假设您的环境变量定义在您的~/.bash_profile如下所示:

export JAVA_HOME="$(/usr/libexec/java_home -v 1.8)"export GOPATH="$HOME/go"export PATH="$PATH:/usr/local/opt/go/libexec/bin:$GOPATH
/bin"export PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"export MANPATH="/usr/local/opt/coreutils/libexec/gnuman:$MANPATH"

我们需要一个发射剂它将在每次登录上运行,并随时按需运行,这将这些变量加载到用户会话中。我们还需要一个shell脚本来解析这些定义,并构建由代理执行的必要命令。

创建一个文件plist后缀(例如命名)osx-env-sync.plist)在~/Library/LaunchAgents/具有以下内容的目录:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" " 
<plist version="1.0"><dict>
  <key>Label</key>
  <string>osx-env-sync</string>
  <key>ProgramArguments</key>
  <array>
    <string>bash</string>
    <string>-l</string>
    <string>-c</string>
    <string>
      $HOME/.osx-env-sync.sh    </string>
  </array>
  <key>RunAtLoad</key>
  <true/></dict></plist>

-l参数是非常关键的;对于使用登录壳所以~/.bash_profile是在执行此脚本之前首先源的。

现在,shell脚本。在~/.osx-env-sync.sh内容如下:

grep export $HOME/.bash_profile | while IFS=' =' read ignoreexport envvar ignorevalue; do
  launchctl setenv ${envvar} ${!envvar}done

确保shell脚本是可执行的:

chmod +x ~/.osx-env-sync.sh

现在,加载当前会话的启动代理:

launchctl load ~/Library/LaunchAgents/osx-env-sync.plist

(重新)启动一个GUI应用程序,并验证它是否能够读取环境变量。

设置是持久的。它将继续重新启动和重新登录。

在初始设置(您刚刚完成的设置)之后,如果您想要反映您~/.bash_profile重新运行launchctl load ...命令不会执行所需的操作;相反,您将得到如下警告:

<$HOME>/Library/LaunchAgents/osx-env-sync.plist: Operation already in progress

为了在不经历注销/登录过程的情况下重新加载环境变量,请执行以下操作:

launchctl unload ~/Library/LaunchAgents/osx-env-sync.plist
launchctl load ~/Library/LaunchAgents/osx-env-sync.plist

最后,确保重新启动已经运行的应用程序(包括Terminal.app),以使它们知道更改。

我还将代码和解释推到了GitHub项目:OSX-env-同步.

我希望这将是最终的解决方案,至少对OSX的最新版本(Yosemite&El Capitan)是如此。


查看完整回答
反对 回复 2019-05-30

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信