我正在为我的跨平台应用程序编写一个自动更新工具。更新程序部分下载安装程序文件并执行shell命令来安装它。在MacOS上,我们的“安装程序”采用.dmg文件的形式。我需要能够悄悄地挂载磁盘映像,将包含的.app复制/覆盖到目标目录,然后卸载磁盘映像。我假设磁盘映像包含一个可以直接复制到/Applications或其他地方的包。没有合理的方法将任意.dmg文件作为asked before来处理,因为它的内容无法被知道。必须作出一些假设。
发布于 2019-04-26 14:23:02
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退出代码https://stackoverflow.com/questions/55869631
复制相似问题