来自OSX“安装程序”的延迟

时间:2013-09-11 22:21:14

标签: macos installer

我有以下脚本从终端安装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”之间进行同步吗?

1 个答案:

答案 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

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