在OS X中修改环境变量如PATH的正确方法是什么?
我看了谷歌一点,找到了三个不同的文件进行编辑:
/etc/paths ~ / . profile ~ / tcshrc
我甚至没有这些文件中的一些,我很确定.tcshrc是错误的,因为OS X现在使用bash。这些变量,特别是PATH,定义在哪里?
我运行的是OS X v10.5 (Leopard)。
在OS X中修改环境变量如PATH的正确方法是什么?
我看了谷歌一点,找到了三个不同的文件进行编辑:
/etc/paths ~ / . profile ~ / tcshrc
我甚至没有这些文件中的一些,我很确定.tcshrc是错误的,因为OS X现在使用bash。这些变量,特别是PATH,定义在哪里?
我运行的是OS X v10.5 (Leopard)。
当前回答
很简单:
编辑~ /。对变量进行配置并按如下方式放置
$ vim ~/.profile
在文件中放置:
MY_ENV_VAR =值
保存(:wq) 重启终端(退出并重新打开) 确保这一切都没问题:
$MY_ENV_VAR 美元的价值
其他回答
来自单一来源的命令行和GUI应用程序的解决方案(适用于Mac OS X v10.10 (Yosemite)和Mac OS X v10.11 (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脚本来解析这些定义并构建由代理执行的必要命令。
在~/Library/LaunchAgents/目录下创建一个后缀为plist的文件(例如osx-env-sync.plist),内容如下:
<?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中创建以下内容:
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 > /图书馆/ LaunchAgents / osx-env-sync。plist:操作已经在进行中
为了在不退出/登录的情况下重新加载环境变量,请执行以下操作:
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)来说是这样。
在追逐环境变量首选项窗格后,发现链接已经损坏,在苹果网站上搜索似乎表明他们已经忘记了它……我开始回到难以捉摸的发射过程。
在我的系统(Mac OS X 10.6.8)上,似乎在环境中定义的变量。plist被可靠地导出到从Spotlight启动的应用程序(通过launchd)。我的问题是,这些变量没有被导出到终端中的新bash会话。也就是说,我的问题与这里描述的相反。
注:环境。如前所述,plist看起来像JSON,而不是XML
我可以通过编辑~/MacOSX/environment让Spotlight应用程序看到变量。plist和 我能够通过在我的.profile文件中添加以下内容将相同的vars强制到一个新的Terminal会话中:
eval $(launchctl export)
做的事: vim ~ / . bash_profile 文件可能不存在(如果不存在,您可以直接创建它)。 输入并保存文件: 导出路径= $路径:YOUR_PATH_HERE 运行 源~ / . bash_profile
直到和包括OS X v10.7 (Lion),你可以设置它们:
~/.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
对于终端中的PATH,您应该能够在.bash_profile或.profile中设置(尽管您可能必须创建它)
对于OS X v10.8 (Mountain Lion)及以上版本,您需要使用launchd和launchctl。
我的个人实践是.bash_profile。我在这里添加路径并附加到Path变量,
GOPATH=/usr/local/go/bin/
MYSQLPATH=/usr/local/opt/mysql@5.6/bin
PATH=$PATH:$GOPATH:$MYSQLPATH
之后,我可以有个人的路径通过echo$ GOPATH, echo$MYSQLPATH或所有通过echo$ Path。