0

我正在尝试sourcelaunch agent. 我知道单个变量很容易setenv,但是我需要引入一堆变量,所以source这就是我所需要的。

<?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.sourcerer</string>
    <key>ProgramArguments</key>
    <array>
        <string>source</string>
        <string>my_file.sh</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>WorkingDirectory</key>
    <string>/path/to/source</string>
</dict>
</plist>

这似乎没有任何问题加载和启动:

$ launchctl load ~/Library/LaunchAgents/my.sourcerer.plist
$ launchctl start ~/Library/LaunchAgents/my.sourcerer.plist

但是当我printenv没有出现我的源环境变量时。如果手动我这样做:

$ source /path/to/source/my_file.sh
$ printenv

然后所有的变量都出现了。为什么launchctl代理似乎没有将变量加载到我的环境中?

4

1 回答 1

1

根据对这个问题的评论,我将竭尽全力尝试回答这个问题。

您似乎想在登录时启动程序,而不是在打开第一个终端会话后手动启动。解决方案是创建一个脚本,其中包含source初始化环境所需的命令。然后将该脚本路径名作为~/Library/LaunchAgents/my.sourcerer.plist配置的第一个参数。

您还可以通过静态设置这些变量launchctl setenv。但我不会推荐这种方法,因为它显然不是动态的。也就是说,如果sourced 脚本的输出改变了每个进程继承的静态设置的环境变量,则不会改变.jj

于 2019-03-23T05:04:39.933 回答