duo 命令
同一个引擎做成的命令行工具,以及它宁可拒绝、也不肯只做一半的两件事。
← 全部文档
同一个引擎也提供了命令行形式。duo 链接的是真正的 DuoUpdaterCore,所以它使用和菜单栏应用相同顺序的相同源、相同的安装策略,以及相同的忽略与跳过规则——两者之间如果结果不一致,那是个 bug,不是看法不同。
make cli # → 生成 ~/.local/libexec/duo,并在 ~/.local/bin/duo 建立符号链接
duo list # 列出已安装的内容,不联网
duo check --json # 列出有更新的内容,每行一个 JSON 对象
duo install Cursor # 安装其中一个,或用 --all 安装全部
duo doctor # 检查这台机器目前到底能不能安装
duo backups # 列出回滚点,或恢复其中一个
duo check 和 duo list 也支持 --source sparkle,github,… 和 --include-hidden 参数。duo ignore 和 duo skip 写入的偏好设置和应用读取的是同一份,所以在其中一个里隐藏了什么,在另一个里也会被隐藏。
它宁可拒绝、也不肯只做一半的两件事
App Store 更新。 这条路线要么需要特权助理——它的 SMAppService 注册需要一个应用包——要么需要通过辅助功能 API 驱动 App Store.app。命令行工具两者都不具备,所以它会直接说明这一点,而不是做到一半才失败。
强行获取安装锁。 如果菜单栏应用正在安装中,duo 会退出并说明锁被谁占用着,而不会趁它安装到一半时把应用包换掉。
维护相关的部分
duo verify、duo triage 和 duo reconcile 会把每一条手写的 recipe 拿去对照厂商真实的接口逐一核实,让一个模型分析出错的 recipe 为什么出错,并把结果转成 issue。夜间检查跑的就是这几个命令。日常使用不需要它们。