首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用单个命令从dmg静默地安装MacOS .app?

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

Stack Overflow用户
提问于 2019-04-26 14:23:02
回答 1查看 3.7K关注 0票数 2

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-26 14:23:02

代码语言:javascript
复制
VOLUME=$(hdiutil attach -nobrowse '[DMG FILE]' |
    tail -n1 | cut -f3-; exit ${PIPESTATUS[0]}) &&
(rsync -a "$VOLUME"/*.app /Applications/; SYNCED=$?
    (hdiutil detach -force -quiet "$VOLUME" || exit $?) && exit "$SYNCED")

我来把这个分解一下:

  • hdiutil attach -nobrowse '[DMG FILE]'挂载磁盘映像,但不要在桌面上显示
  • | tail -n1 | cut -f3-丢弃hdiutil最后一行输出的前两个标记,剩下的是已安装的卷
  • VOLUME=$(...; exit ${PIPESTATUS[0]})VOLUME设置为上述输出,并将退出代码设置为hdiutil的输出。
  • &&如果磁盘映像已成功挂载.
  • rsync -a "$VOLUME"/*.app /Applications/ ...use rsync将.app文件复制到/Applications目录,同时保留权限/符号链接/所有权等。
  • ; SYNCED=$?存储rsync操作的结果
  • (hdiutil detach -force -quiet "$VOLUME"强制卸载磁盘映像
  • 使用|| exit $?) && "$SYNCED"退出代码退出,如果hdiutil退出代码成功,则退出rsync退出代码
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55869631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档