更新:下面的链接 没有一个完整的答案.具有设置的路径或可变在两个地方(一个用于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 &lt; ~/.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,因而可能看不到的环境变量集。

我认为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?

一般来说,我不喜欢乱与全系统设置,尽管只有我的用户。我喜欢我的编辑地设置。

对于GUI应用程序,您必须创建和编辑〜/ .MacOSX / environment.plist 。更多详细信息,请此处。您需要注销才能生效。我不确定它们是否也影响从终端发起的应用程序,但我认为它们会。

对于从终端启动的应用,您还可以编辑〜/ .profile文件。

只需打开〜/ .profile 文件,通过终端中的 nano 输入:

export PATH=whatever/you/want:$PATH

保存此文件(cmd + X和Y)。 之后请再次注销/登录,或者只需在终端中打开一个新选项卡,然后尝试使用新变量。

请不要忘记添加“:$ PATH”在你/你想要的任何之后,否则你将删除PATH变量中的所有路径,这些路径就在那之前。

如果要在macOS上永久更改环境变量,请在 / etc / paths 中设置它们。 注意,默认情况下此文件是只读的,因此您必须 chmod 才能获得写入权限。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top