首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在OS X上设置环境变量

在OS X上设置环境变量
EN

Stack Overflow用户
提问于 2008-09-26 04:06:48
回答 26查看 781.3K关注 0票数 884

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

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

  • /etc/paths
  • ~/.profile
  • ~/.tcshrc

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

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

EN

回答 26

Stack Overflow用户

发布于 2009-02-25 23:42:27

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

请注意,environment.plist does not work for applications launched via Spotlight. This is documented by Steve Sexton here

  1. 打开终端提示符
  2. 类型sudo vi /etc/launchd.conf (注意:此文件可能还不存在)
  3. 将如下内容放入此处的fileSet环境变量中,以便它们全局可用于所有应用程序#(和终端),包括那些通过Spotlight启动的应用程序。##编辑完该文件后,在终端执行以下命令,无需重启即可全局更新#环境变量。#注意:您仍然需要重新启动相关的应用程序(包括# Terminal)才能使更改生效!# grep -E "^setenv“/etc/launchd.conf | xargs -t -L 1启动etc##请参阅http://www.digitaledgesw.com/node/31 #和http://stackoverflow.com/questions/135688/setting-environment-variables-in-os-x/ ##请注意,您必须硬编码下面的路径,不要使用环境变量。#您还需要用引号将多个值括起来,请参阅下面的MAVEN_OPTS示例。# 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/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在vi中/Applications/Dev/jakarta-jmeter
  4. Save你的更改,然后重启你的Mac。或者使用上面的代码注释中所示的grep/xargs命令。
  5. 通过打开终端窗口并键入export来证明您的变量正在工作,您应该会看到新的变量。这些也将在IntelliJ IDEA和通过Spotlight启动的其他图形用户界面应用程序中可用。
票数 670
EN

Stack Overflow用户

发布于 2008-09-25 20:08:31

在包括 ()之前,您可以在以下位置设置它们:

代码语言:javascript
复制
~/.MacOSX/environment.plist

请参见:

对于终端中的路径,您应该能够在.bash_profile.profile中进行设置(尽管您可能必须创建它)

适用于 (山狮)和beyond you need to use launchd and launchctl

票数 108
EN

Stack Overflow用户

发布于 2015-09-05 04:06:52

从单一来源同时使用命令行和图形用户界面应用程序的解决方案(适用于Mac OS X v10.10 (Yosemite)和Mac OS X v10.11 (El Capitan))

让我们假设您的~/.bash_profile中有如下代码片段所示的环境变量定义:

代码语言:javascript
复制
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脚本来解析这些定义,并构建要由代理执行的必要命令。

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

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<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参数至关重要;它对于使用登录shell执行shell脚本是必要的,以便在执行此脚本之前首先获取~/.bash_profile

现在,来看看shell脚本。在~/.osx-env-sync.sh上创建,包含以下内容:

代码语言:javascript
复制
grep export $HOME/.bash_profile | while IFS=' =' read ignoreexport envvar ignorevalue; do
  launchctl setenv "${envvar}" "${!envvar}"
done

确保shell脚本是可执行的:

代码语言:javascript
复制
chmod +x ~/.osx-env-sync.sh

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

代码语言:javascript
复制
launchctl load ~/Library/LaunchAgents/osx-env-sync.plist

(重新)启动GUI应用程序并验证它是否可以读取环境变量。

设置是持久的。它将在重新启动和重新登录后存活下来。

在初始设置之后(您刚才这样做了),如果您想再次将~/.bash_profile中的任何更改反映到整个环境中,重新运行launchctl load ...命令将不会执行您想要的操作;相反,您将收到如下所示的警告:

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

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

代码语言:javascript
复制
launchctl unload ~/Library/LaunchAgents/osx-env-sync.plist
launchctl load ~/Library/LaunchAgents/osx-env-sync.plist

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

我还将这里的代码和解释推到了一个GitHub项目中:osx-env-sync

我希望这将是最终的解决方案,至少对于最新版本的OS-X (Yosemite & El Capitan)来说是这样。

票数 75
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/135688

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档