如何在launchd plist中访问环境变量

miv*_*ivk 8 macos launchd

我有一个launchd per-user代理.在它的.plist中,我想使用$HOME环境变量.

可能吗?

(它是"程序"键,我想将其定义为"$ HOME/bin/myscript")

Gor*_*son 6

launchd不会对其.plists中的值执行任何替换,因此无法以您尝试执行此操作的形式执行此操作.你可以做的是手要运行一个shell命令,并让执行变量替换和运行命令.例如,您可以用以下代码替换该Program键:

<key>ProgramArguments</key>
<array>
    <string>/bin/sh</string>
    <string>-c</string>
    <string>exec $HOME/tmp/myscript</string>
</array>
Run Code Online (Sandbox Code Playgroud)

(请注意,exec前缀不是必需的,它只是一个小的优化.它使shell用脚本替换自己,而不是将脚本作为子进程启动,然后等待它完成.)


Lri*_*Lri 5

EnableGlobbing 为 ProgramArguments(但不是 Program)启用波浪号和通配符扩展。

<key>EnableGlobbing</key>
<true/>
<key>ProgramArguments</key>
<array>
    <string>~/bin/myscript</string>
</array>
Run Code Online (Sandbox Code Playgroud)

ProgramArguments 只能是一个字符串数组,而不仅仅是一个字符串。默认情况下,波浪号扩展也适用于 WatchPaths。