我有以下脚本从终端安装Mac包:
#!/bin/sh
if [ -d /Applications/XX.app ]; then
hdiutil mount XX.dmg
cd /Volumes/XX
sudo installer -pkg XX.pkg -target /
cd ..
hdiutil unmount XX
fi
有时它工作正常,但有时它最终会出错:
hdiutil: unmount: "XX" failed to unmount due to error 49168.
hdiutil: unmount failed - Resource busy
实际上,几秒钟后,XX变得无法安装。我意识到这可能是由于“安装程序”的延迟,在调用“卸载XX”时尚未完成。无论如何要在“installer”和“unmount”之间进行同步吗?
答案 0 :(得分:0)
我查看了“安装程序”命令手册并没有找到直接的解决方案 避免这种同步问题。
我提出的解决方案是,在退出“安装程序”之后,我 将每隔一秒从“hdiutil unmount”查询状态,直到 实现正常终止信号,即:
#!/bin/sh
if [ ! -d /Applications/XX.app ]; then
hdiutil mount XX.dmg
cd /Volumes/XX
sudo installer -pkg XX.pkg -target /
cd ..
flag=1
while [ $flag -ne 0 ]
do
sleep 1
hdiutil unmount XX
flag=$?
done
fi
我知道这可能不是最好的解决方案,我期待更优雅的选择。