为了账号安全,请及时绑定邮箱和手机立即绑定

通过Launchd.conf设置环境变量不再适用于OSX Yosemite/El Capitan

/ 猿问

通过Launchd.conf设置环境变量不再适用于OSX Yosemite/El Capitan

通过Launchd.conf设置环境变量不再适用于OSX Yosemite/El Capitan/MacOS塞拉利昂/Mojave?

看起来像是launchd.conf不再加载我的环境变量。还有人注意到吗?

是否有另一种永久设置环境变量的解决方案?


查看完整描述

3 回答

?
慕码人8056858

创建一个environment.plist文件在~/Library/LaunchAgents/有了这个内容:

<?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>my.startup</string>
  <key>ProgramArguments</key>
  <array>
    <string>sh</string>
    <string>-c</string>
    <string>
    launchctl setenv PRODUCTS_PATH /Users/mortimer/Projects/my_products
    launchctl setenv ANDROID_NDK_HOME /Applications/android-ndk
    launchctl setenv PATH $PATH:/Applications/gradle/bin
    </string>

  </array>
  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>

你可以添加很多launchctl控件内部的命令。<string></string>封锁。

这个plist将在系统重新启动后激活。您也可以使用launchctl load ~/Library/LaunchAgents/environment.plist立即发射。

[编辑]

同样的解决方案也适用于El Capitan。

默认情况下,Xcode 7.0+不计算环境变量。可以使用以下命令启用旧行为:

defaults write com.apple.dt.Xcode UseSanitizedBuildSystemEnvironment -bool NO

[编辑]

有几种情况下,这是不完全可行的。如果重新启动计算机并选择“重新登录时重新打开窗口”,则重新打开的窗口可能看不到变量(可能是在代理运行之前打开的)。另外,如果您通过ssh登录,则不会设置变量(因此需要在~/.bash_profile中设置它们)。最后,这似乎不适用于埃尔卡皮坦和塞拉的道路。这需要通过‘Launchctl配置用户路径.’来设置。以及在/etc/小径上。


查看完整回答
反对 2019-07-11
?
慕标琳琳

可以使用3个文件+2命令在MacOSX10.10Yosemite上设置环境变量。

具有环境变量定义的主文件:

$ ls -la /etc/environment 
-r-xr-xr-x  1 root  wheel  369 Oct 21 04:42 /etc/environment
$ cat /etc/environment
#!/bin/sh

set -e

syslog -s -l warn "Set environment variables with /etc/environment $(whoami) - start"

launchctl setenv JAVA_HOME      /usr/local/jdk1.7
launchctl setenv MAVEN_HOME     /opt/local/share/java/maven3

if [ -x /usr/libexec/path_helper ]; then
    export PATH=""
    eval `/usr/libexec/path_helper -s`
    launchctl setenv PATH $PATH
fi

osascript -e 'tell app "Dock" to quit'

syslog -s -l warn "Set environment variables with /etc/environment $(whoami) - complete"

为用户应用程序(终端、IDE、.)加载环境变量的服务定义:

$ ls -la /Library/LaunchAgents/environment.user.plist
-rw-------  1 root  wheel  504 Oct 21 04:37 /Library/LaunchAgents/environment.user.plist
$ sudo cat /Library/LaunchAgents/environment.user.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>environment.user</string>
    <key>ProgramArguments</key>
    <array>
            <string>/etc/environment</string>
    </array>
    <key>KeepAlive</key>
    <false/>
    <key>RunAtLoad</key>
    <true/>
    <key>WatchPaths</key>
    <array>
        <string>/etc/environment</string>
    </array>
</dict>
</plist>

根用户应用程序的相同服务定义:

$ ls -la /Library/LaunchDaemons/environment.plist
-rw-------  1 root  wheel  499 Oct 21 04:38 /Library/LaunchDaemons/environment.plist
$ sudo cat /Library/LaunchDaemons/environment.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>environment</string>
    <key>ProgramArguments</key>
    <array>
            <string>/etc/environment</string>
    </array>
    <key>KeepAlive</key>
    <false/>
    <key>RunAtLoad</key>
    <true/>
    <key>WatchPaths</key>
    <array>
        <string>/etc/environment</string>
    </array>
</dict>
</plist>

最后,我们应该注册这些服务:

$ launchctl load -w /Library/LaunchAgents/environment.user.plist
$ sudo launchctl load -w /Library/LaunchDaemons/environment.plist

我们得到的是:

  1. 声明系统环境变量的唯一位置:/etc/Environment
  2. 修改/etc/环境文件后立即自动更新环境变量-只需重新启动应用程序

问题/问题:

为了使您的env变量被应用程序正确地接受系统重启后你需要:

  • 要么登录两次:login=>logout=>login
  • 或者关闭&手动重新打开应用程序,其中应该使用env变量。
  • 或者不要使用“重新登录时重新打开窗口”功能。

这是因为Apple拒绝对已加载的服务进行显式排序,因此env变量与处理“重开队列”的过程并行进行。

但实际上,我每年只重新启动系统几次(在大更新时),所以这不是什么大事。


查看完整回答
反对 2019-07-11
  • 3 回答
  • 0 关注
  • 335 浏览

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信