Abd*_*aly 183 macos environment-variables
更新:以下链接没有完整的答案.必须在两个地方设置路径或变量(一个用于GUI,一个用于shell)是蹩脚的.
不重复:在OS X中设置环境变量?
来自Windows背景,可以很容易地设置和修改环境变量(只需转到系统属性>高级>环境变量),在Mac OS 10.5上似乎没那么直接.大多数参考文献都说我应该更新/ etc/profile或〜/ .profile.那些是系统变量和用户变量的等价物吗?例如,我应该在哪里设置我的JAVA_HOME
变量?
编辑:
我希望能够从终端以及像Eclipse这样的应用程序访问该变量.此外,我希望我不必重新启动/注销以使此生效.
LaC*_*LaC 292
您可以在几个地方设置环境变量.
~/.profile
:将此用于要在终端启动的所有程序中设置的变量(请注意,与Linux不同,在Terminal.app中打开的所有shell都是登录shell).~/.bashrc
:对于非登录shell的shell调用此方法.将此用于需要在子shell中重新定义的别名和其他内容,而不是用于继承的环境变量./etc/profile
:这是在〜/ .profile之前加载的,但在其他方面是等效的.当您希望变量应用于计算机上所有用户启动的终端程序时(假设它们使用bash),请使用它.~/.MacOSX/environment.plist
:这是登录时loginwindow读取的.它适用于所有应用程序,包括GUI应用程序,但Spotlight在10.5(而不是10.6)中发布的应用程序除外.它要求您注销并再次登录才能使更改生效.自OS X 10.8起不再支持此文件.launchd
实例:这适用于用户,GUI和CLI启动的所有程序.您可以随时使用setenv
命令应用更改launchctl
.从理论上讲,您应该能够输入setenv
命令~/.launchd.conf
,并launchd
在用户登录时自动读取命令,但实际上从未实现过对此文件的支持.相反,您可以使用其他机制在登录时执行脚本,并通过该脚本调用launchctl
来设置launchd
环境./etc/launchd.conf
:当系统启动时和用户登录时,它由launchd读取.它们影响系统上的每个进程,因为launchd是根进程.要将更改应用于正在运行的运行根,您可以将命令通过管道传输sudo launchctl
.要理解的基本要素是:
launchctl
; 更改其当前环境变量; 然后,更新的变量将从之后分叉的所有新进程继承.使用launchd设置环境变量的示例:
echo setenv REPLACE_WITH_VAR REPLACE_WITH_VALUE | launchctl
Run Code Online (Sandbox Code Playgroud)
现在,启动使用变量的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>
Run Code Online (Sandbox Code Playgroud)
然后你可以放入setenv REPLACE_WITH_VAR REPLACE_WITH_VALUE
内部~/.launchd.conf
,它将在每次登录时执行.
请注意,在以这种方式将命令列表传递到launchctl时,您将无法使用包含空格的值设置环境变量.如果需要,可以按如下方式调用launchctl : launchctl setenv MYVARIABLE "QUOTE THE STRING"
.
另请注意,在登录时运行的其他程序可能会在启动之前执行,因此可能无法看到它设置的环境变量.
Mat*_*tis 141
没有必要重复.您可以使用launchd(和子进程,即从Spotlight开始的任何内容)设置环境变量launchctl setenv
.
例如,如果要在启动后在.bashrc
或在以下任何位置设置镜像当前路径:
PATH=whatever:you:want
launchctl setenv PATH $PATH
Run Code Online (Sandbox Code Playgroud)
在运行的应用程序中不会自动更新环境变量.您需要重新启动应用程序以获取更新的环境变量(尽管您可以在shell中设置变量,例如PATH=whatever:you:want
;不需要重新启动终端).
Tom*_*man 12
我认为OP正在寻找的是一个简单的,类似Windows的解决方案.
你走了:
https://www.macupdate.com/app/mac/14617/rcenvironment
你可以在linux上阅读,这与Mac OS X非常接近.或者你可以阅读更接近的BSD Unix.在大多数情况下,Linux和BSD之间的差异并不大.
/etc/profile
是系统环境变量.
~/.profile
是特定于用户的环境变量.
"我应该在哪里设置我的JAVA_HOME变量?"
/etc/profile
吗? 一般来说,即使我是唯一的用户,我也不想搞乱系统范围的设置.我更喜欢编辑我的本地设置.
归档时间: |
|
查看次数: |
212718 次 |
最近记录: |