0

我有以下脚本可以从终端安装 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”时尚未完成。无论如何要在“安装程序”和“卸载”之间进行同步?

4

1 回答 1

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

我知道这可能不是最好的解决方案,我期待更优雅的替代方案。

于 2013-09-11T23:18:31.917 回答