Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
macosx中的环境变量_Macos_Environment Variables - Fatal编程技术网

macosx中的环境变量

macosx中的环境变量,macos,environment-variables,Macos,Environment Variables,更新:下面的链接没有完整的答案。必须在两个位置(一个用于GUI,一个用于shell)设置路径或变量是很蹩脚的 不是重复的: 在Windows背景下,设置和修改环境变量非常容易(只需进入“系统属性”>“高级”>“环境变量”),在Mac OS 10.5上似乎并不是那么简单。大多数参考资料都说我应该更新/etc/profile或~/.profile。这些是否等同于系统变量和用户变量?例如,我应该在哪里设置JAVA\u HOME变量 编辑: 我希望能够从终端以及Eclipse之类的应用程序访问变量。

更新:下面的链接没有完整的答案。必须在两个位置(一个用于GUI,一个用于shell)设置路径或变量是很蹩脚的

不是重复的


在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的解决方案

给你:


有几个地方可以设置环境变量

  • ~/.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启动的所有程序。您可以随时使用
    launchctl
    中的
    setenv
    命令应用更改。理论上,您应该能够将
    setenv
    命令放入
    ~/.launchd.conf
    中,并且
    launchd
    将在用户登录时自动读取这些命令,但实际上从未实现对此文件的支持。相反,您可以使用另一种机制在登录时执行脚本,并让该脚本调用
    launchctl
    来设置
    launchd
    环境
  • /etc/launchd.conf
    :当系统启动和用户登录时,launchd将读取该值。它们影响系统上的每个进程,因为launchd是根进程。要将更改应用于正在运行的root launchd,可以将命令通过管道传输到
    sudo launchctl
需要了解的基本情况是:

  • 环境变量在分叉时由进程的子进程继承
  • 根进程是一个启动实例,每个用户会话也有一个单独的启动实例
  • 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>

标签
local.launchd.conf
程序参数
嘘
-c
launchctl~/.launchd.conf
运行负荷
然后,您可以将
setenv REPLACE\u放入
~/.launchd.conf
中,并在每次登录时执行

请注意,当以这种方式将命令列表管道化到launchctl中时,将无法使用包含空格的值设置环境变量。如果需要,可以按如下方式调用launchctl:
launchctl setenv MYVARIABLE“引用字符串”

另外,请注意,在登录时运行的其他程序可能在launchagent之前执行,因此可能看不到环境
export PATH=whatever/you/want:$PATH