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

问题描述 投票:0回答:1

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

macos command-line terminal dmg .app
1个回答
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退出代码
© www.soinside.com 2019 - 2024. All rights reserved.