如何使用单个命令从dmg静默安装MacOS .app?

时间:2019-04-26 14:23:02

标签: macos command-line terminal dmg .app

我正在为我的跨平台应用程序编写自动更新工具。更新程序部分下载安装程序文件并执行Shell命令以进行安装。在MacOS上,我们的“安装程序”采用.dmg文件的形式。我需要能够以静默方式挂载磁盘映像,将包含的.app复制/覆盖到目标目录,然后卸载磁盘映像。我假设磁盘映像包含可以直接复制到/Applications或其他位置的捆绑软件。没有明智的方式将任意.dmg文件处理为asked before,因为无法知道其内容。必须做出一些假设。

1 个答案:

答案 0 :(得分:0)

VOLUME=$(hdiutil attach -nobrowse '[DMG FILE]' |
    awk 'END {print $3}'; exit ${PIPESTATUS[0]}) &&
(rsync -a "$VOLUME"/*.app /Applications/; SYNCED=$?
    hdiutil detach -quiet "$VOLUME"; exit $? || exit "$SYNCED")

我将对此进行细分:

  • hdiutil attach -nobrowse '[DMG FILE]'挂载磁盘映像,但不要在桌面上显示
  • | awk 'END {print $3}'从hdiutil输出的最后一行提取第三个令牌,即已装载的卷
  • VOLUME=$(...; exit ${PIPESTATUS[0]})VOLUME设置为上述输出,并将退出代码设置为hdiutil
  • &&如果磁盘映像安装成功...
  • rsync -a "$VOLUME"/*.app /Applications/ ...使用rsync将.app文件复制到/Applications目录,同时保留权限/符号链接/所有权等。
  • ; SYNCED=$?存储rsync操作的结果
  • hdiutil detach -quiet "$VOLUME"卸载磁盘映像
  • exit $? || "$SYNCED"使用hdiutil退出代码退出,如果hdiutil成功则退出rsync退出代码