2013-09-11 3 views
0

У меня есть следующий сценарий, чтобы установить пакет Mac из терминала:Задержка от OSX «инсталлятор»

#!/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 становится несъемным. Я понимаю, что это может быть связано с задержкой с «установщиком», которая еще не была выполнена при вызове «unmount XX». Есть ли вообще синхронизация между «установщиком» и «размонтированием»?

ответ

0

Я прошел через руководство по установке «установщика» и не нашел прямого решения для , чтобы избежать этой проблемы синхронизации.

Решение, которое я придумал, что, после того, как выйти из «инсталлятор», я будет держать запрос состояния от «hdiutil отмонтируется» каждый второй пока не будет достигнут нормальный сигнал завершения, то есть:

#!/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 

Я знаю, что это не может быть лучшим решением, и я с нетерпением жду более элегантных альтернатив.

Смежные вопросы