macosx中的环境变量
更新:下面的链接没有完整的答案。必须在两个位置(一个用于GUI,一个用于shell)设置路径或变量是很蹩脚的 不是重复的:macosx中的环境变量,macos,environment-variables,Macos,Environment Variables,更新:下面的链接没有完整的答案。必须在两个位置(一个用于GUI,一个用于shell)设置路径或变量是很蹩脚的 不是重复的: 在Windows背景下,设置和修改环境变量非常容易(只需进入“系统属性”>“高级”>“环境变量”),在Mac OS 10.5上似乎并不是那么简单。大多数参考资料都说我应该更新/etc/profile或~/.profile。这些是否等同于系统变量和用户变量?例如,我应该在哪里设置JAVA\u HOME变量 编辑: 我希望能够从终端以及Eclipse之类的应用程序访问变量。
在Windows背景下,设置和修改环境变量非常容易(只需进入“系统属性”>“高级”>“环境变量”),在Mac OS 10.5上似乎并不是那么简单。大多数参考资料都说我应该更新/etc/profile或~/.profile。这些是否等同于系统变量和用户变量?例如,我应该在哪里设置
JAVA\u HOME
变量
编辑:
我希望能够从终端以及Eclipse之类的应用程序访问变量。另外,我希望我不必重新启动/注销以使其生效。对于GUI应用程序,您必须创建和编辑
~/.MacOSX/environment.plist
。更多细节。您需要注销才能使这些生效。我不确定它们是否也会影响从终端启动的应用程序,但我认为它们会
对于从终端启动的应用程序,您还可以编辑~/.profile文件。您可以在linux上阅读,这与Mac OS X非常接近。或者您也可以在BSD Unix上阅读,这一点更接近。在大多数情况下,Linux和BSD之间的差异并不大
/etc/profile
是系统环境变量
~/.profile
是用户特定的环境变量
“我应该在哪里设置JAVA_HOME变量?”
- 你有多个用户吗?他们在乎吗?你会通过更改
,把其他用户搞得一团糟吗李>/etc/profile
一般来说,即使我是唯一的用户,我也不喜欢干扰系统范围的设置。我更喜欢编辑本地设置。无需复制。您可以使用
launchctl setenv
设置launchd(和子进程,即从Spotlight开始的任何进程)使用的环境变量
例如,如果在.bashrc
或任何地方设置后,希望在launchd中镜像当前路径:
PATH=whatever:you:want
launchctl setenv PATH $PATH
环境变量不会在正在运行的应用程序中自动更新。您需要重新启动应用程序以获得更新的环境变量(尽管您可以在shell中设置变量,例如,
PATH=which:You:want
;无需重新启动终端)。我认为OP需要的是一个简单的、类似windows的解决方案
给你:
有几个地方可以设置环境变量
:将此变量用于要在从终端启动的所有程序中设置的变量(请注意,与Linux不同,在terminal.app中打开的所有shell都是登录shell)~/.profile
:对于非登录shell的shell调用此命令。对于别名和其他需要在子shell中重新定义的内容,而不是继承的环境变量,使用此选项~/.bashrc
:这是在~/.profile之前加载的,但在其他方面是等效的。当希望变量应用于计算机上所有用户启动的终端程序时(假设他们使用bash),可以使用它/etc/profile
:登录时由loginwindow读取。它适用于所有应用程序,包括GUI应用程序,Spotlight在10.5(而不是10.6)中启动的应用程序除外。它要求您注销并再次登录,以使更改生效。从OS X 10.8起不再支持此文件~/.MacOSX/environment.plist
- 用户的
实例:这适用于用户、GUI和CLI启动的所有程序。您可以随时使用launchd
中的launchctl
命令应用更改。理论上,您应该能够将setenv
命令放入setenv
中,并且~/.launchd.conf
将在用户登录时自动读取这些命令,但实际上从未实现对此文件的支持。相反,您可以使用另一种机制在登录时执行脚本,并让该脚本调用launchd
来设置launchctl
环境launchd
:当系统启动和用户登录时,launchd将读取该值。它们影响系统上的每个进程,因为launchd是根进程。要将更改应用于正在运行的root launchd,可以将命令通过管道传输到/etc/launchd.conf
sudo launchctl
- 环境变量在分叉时由进程的子进程继承
- 根进程是一个启动实例,每个用户会话也有一个单独的启动实例
- launchd允许您使用
更改其当前环境变量;更新后的变量随后被它从此派生的所有新进程继承launchctl
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>
标签
local.launchd.conf
程序参数
嘘
-c
launchctl~/.launchd.conf
运行负荷
然后,您可以将setenv REPLACE\u放入~/.launchd.conf
中,并在每次登录时执行
请注意,当以这种方式将命令列表管道化到launchctl中时,将无法使用包含空格的值设置环境变量。如果需要,可以按如下方式调用launchctl:launchctl setenv MYVARIABLE“引用字符串”
另外,请注意,在登录时运行的其他程序可能在launchagent之前执行,因此可能看不到环境
export PATH=whatever/you/want:$PATH