题
更新:下面的链接 没有一个完整的答案.具有设置的路径或可变在两个地方(一个用于GUI和一个用于壳牌)是跛脚的。
不是重复的: 设置环境中的变量OS X?
来自一个窗背景,这是非常容易设置和修改环境变量(刚回到系统性>高级>环境变量),这似乎不是这一直向前在Mac OS10.5.最引用说我应该更新/etc/profile或~/.配置文件。是那些等同的变量和系统用户变数?例如,其中应该设置我 JAVA_HOME
变量?
编辑:
我希望能够访问该变量从终端,以及一个应用程序,如食。此外,我希望我不需要重新启动/注销,使这种生效。
解决方案
不需要重复。您可以使用 launchctl setenv
设置launchd(和子进程,即从Spotlight开始的任何内容)使用的环境变量。
例如,如果要在 .bashrc
中设置它之后在launchd中镜像当前路径,或者在任何地方:
PATH=whatever:you:want
launchctl setenv PATH $PATH
在运行的应用程序中,环境变量不会自动更新。您需要重新启动应用程序以获取更新的环境变量(尽管您可以在shell中设置变量,例如 PATH = what:you:want
;不需要重新启动终端)。
其他提示
有几个地方在这里你可以设定环境变量。
~/.profile
:使用这个变量的你要在所有计划推出的从终端(注意,与在Linux上,所有炮开端。应用程序是登录的炮弹).~/.bashrc
:这是援引炮弹是不是登录的炮弹。使用这个别名,其他的东西需要重新定义在子shell,不是为环境变量即是继承的。/etc/profile
:这是装载之前~/.配置文件,但是无相当的。用它的时候你想变量以适用于终端程序启动的由所有用户的机(假定他们使用的庆典).~/.MacOSX/environment.plist
:这是一读通过loginwindow上登录。它适用于所有的应用程序,包括GUI的,除了那些启动的聚光灯下在10.5(不10.6).它需要你的注销和重新登录的变化生效。这种文件不再支持,因为OS X10.8.- 你的用户的
launchd
实例:这适用于所有程序启动用户的图形用户界面和CLI。你可以申请变化在任何时间通过使用setenv
命令launchctl
. 在理论上, 你应该能够把setenv
命令~/.launchd.conf
, ,launchd
会读他们自动时的用户登录,但在实践支持这个文件是从未实施。相反,可以使用另一种机制来执行一个脚本,登录时,有那个脚本呼叫launchctl
设置launchd
环境。 /etc/launchd.conf
:这是一读通过launchd当该系统开始了,当一个用户登录。它们影响到每一个进程的系统,因为launchd是根进程。申请改变运行根launchd你可以管的命令sudo launchctl
.
基本的事情了解的是:
- 环境变量继承通过的孩子的时候他们是分叉。
- 根进程是一个launchd实例,还有一个单独的launchd实例每个用户会议。
- launchd可以让你改变其目前的环境变量使用
launchctl
;更新的变量,然后继承通过的所有新的进程,它叉。
例设置一个环境变量与launchd:
echo setenv REPLACE_WITH_VAR REPLACE_WITH_VALUE | launchctl
现在,启动GUI应用程序,使用的变量,瞧!
工作周围的事实, ~/.launchd.conf
不工作,可以把以下脚本 ~/Library/LaunchAgents/local.launchd.conf.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>local.launchd.conf</string>
<key>ProgramArguments</key>
<array>
<string>sh</string>
<string>-c</string>
<string>launchctl < ~/.launchd.conf</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
然后你可以把 setenv REPLACE_WITH_VAR REPLACE_WITH_VALUE
内部 ~/.launchd.conf
, 和它会被执行的,在每个登录。
注意,当管道命令列入launchctl在这个时尚,你将不能设置环境变量与价值观包含空间。如果你需要这样做,你可以叫launchctl如下: launchctl setenv MYVARIABLE "QUOTE THE STRING"
.
此外,请注意其他程序运行在登录可以执行之前launchagent,因而可能看不到的环境变量集。
你可以阅读了在linux上,这是非常接近什么Mac OS X。或者你可以读了关于BSD Unix,它是一点点接近。大部分之间的差异Linux和BSD不量要多。
/etc/profile
是的系统环境变量。
~/.profile
是用户的具体环境变量。
"我应该在哪里我的JAVA_HOME变量?"
- 你有多个用户?他们在乎吗?你会烂摊子的一些其他用户通过改变
/etc/profile
?
一般来说,我不喜欢乱与全系统设置,尽管只有我的用户。我喜欢我的编辑地设置。
对于GUI应用程序,您必须创建和编辑〜/ .MacOSX / environment.plist
。更多详细信息,请此处。您需要注销才能生效。我不确定它们是否也影响从终端发起的应用程序,但我认为它们会。
对于从终端启动的应用,您还可以编辑〜/ .profile文件。
只需打开〜/ .profile
文件,通过终端中的 nano
输入:
export PATH=whatever/you/want:$PATH
保存此文件(cmd + X和Y)。 之后请再次注销/登录,或者只需在终端中打开一个新选项卡,然后尝试使用新变量。
请不要忘记添加“:$ PATH”在你/你想要的任何之后,否则你将删除PATH变量中的所有路径,这些路径就在那之前。
使用 从单一来源同步命令行和GUI应用程序的OS X环境变量OSX-ENV同步 强>
我还在此处发布了相关问题的答案。
如果要在macOS上永久更改环境变量,请在 / etc / paths
中设置它们。 注意,默认情况下此文件是只读的,因此您必须 chmod 才能获得写入权限。