我正在尝试从launch agent中source一个文件,但是不清楚如何实现(或者它是否可能实现)。我知道对单个变量执行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代理似乎不能将变量加载到我的环境中?
发布于 2019-03-23 13:04:40
根据对这个问题的评论,我将冒险尝试回答这个问题。
您似乎希望在登录时启动程序,而不是在打开第一个终端会话后手动启动。解决方案是创建一个脚本,其中包含初始化环境所需的source命令。然后将该脚本路径名设置为~/Library/LaunchAgents/my.sourcerer.plist配置的第一个参数。
您还可以通过launchctl setenv静态设置这些变量。但我不推荐这种方法,因为它显然不是动态的。也就是说,如果sourced脚本的输出发生变化,则每个进程继承的静态设置的env变量将不会change.jj
https://stackoverflow.com/questions/55309203
复制相似问题