如何制作可以访问 $HOME 变量的 macOS 启动作业

问题描述

我有一个 PKG 安装程序,用于安装启动作业,如下所示:

文件在此处:

/Library/launchdaemons/com.mycompany.myproduct.plist

安装后脚本按如下方式激活它:

launchctl load /Library/launchdaemons/com.mycompany.myproduct.plist

该作业运行一个小程序,需要为登录用户获取 $HOME 变量。当它从 Finder 手动运行时,它按预期工作,但当它从 launchd 运行时,$HOME 变量返回一个空字符串。

我尝试将工作转移到这两个位置的代理,结果相同:

/图书馆/LaunchAgents
~/图书馆/LaunchAgents

为什么它不起作用以及如何访问 $HOME 变量?

2021 年 8 月 8 日更新

在使用旧版/已弃用的加载命令时,目标域似乎存在挑战。于是我将load命令改写如下:

launchctl bootstrap gui/501 ~/Library/LaunchAgents/com.mycompany.myproduct.plist

这显然是假设机器只有一个用户,所以它不是很健壮。

这是经过消毒的 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>com.mycompany.myproduct.agent</string>
    <key>LimitLoadToSessionType</key>
    <string>Aqua</string>
    <key>Program</key>
        <string>/Library/Application Support/mycompany/myproduct/agent.app/Contents/MacOS/applet</string>
    <key>StandardErrorPath</key>
    <string>/dev/null</string>
    <key>StandardOutPath</key>
    <string>/dev/null</string>
    <key>StartCalendarInterval</key>
    <dict>
        <key>Hour</key>
        <integer>12</integer>
        <key>Minute</key>
        <integer>0</integer>
    </dict>
</dict>
</plist>

agent.app 然后需要为活动用户获取 $HOME 变量。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)