Instale todos os DMG’s !!!

Código não muito polido (nem super sólido, tecnicamente!), Mas até agora não me falhou nenhuma vez.

Eu uso isso para instalar qualquer DMG da linha de comando, essencialmente.

function install_from_dmg () {
URL
="${1}"
MOUNT
="${2}"

pushd
/tmp > /dev/null

echo
"Downloading ${URL}"
curl
-L "${URL}" -o app.dmg

MOUNT_PATH
="/Volumes/${MOUNT}"

echo
"Mounting ${MOUNT_PATH}"
hdiutil mount app
.dmg

MPKG_PATH
="$(find "${MOUNT_PATH}" -name "*.mpkg" 2> /dev/null || echo "")"
PKG_PATH
="$(find "${MOUNT_PATH}" -name "*.pkg" 2> /dev/null || echo "")"
APP_PATH
="$(find "${MOUNT_PATH}" -name "*.app" 2> /dev/null || echo "")"
APP_NAME
="$(ls "${MOUNT_PATH}" | grep ".app$" || echo "")"

if
[ "${APP_PATH}" != "" ]
then
echo
"Rsync app to /Applications/${APP_NAME}"
sudo rsync
-av "${APP_PATH}/" "/Applications/${APP_NAME}/"
elif
[ "${MPKG_PATH}" != "" ]
then
install_from_pkg
"${MPKG_PATH}"
elif
[ "${PKG_PATH}" != "" ]
then
install_from_pkg
"${PKG_PATH}"
else
abort
"No app or pkg found for ${MOUNT}"
fi

sleep
5

echo
"Unmounting ${MOUNT_PATH}"
hdiutil unmount
"${MOUNT_PATH}"

echo
"Removing DMG"
rm
-rf app.dmg

popd
> /dev/null
}

function install_from_pkg () {
echo
"Install package ${1}"
sudo installer
-package "${1}" -target "/"
}

Permite:

install_from_dmg 
http
://hc-vagrant-files.s3.amazonaws.com/packages/${VAGRANT_HASH}/Vagrant-${VAGRANT_VERSION}.dmg
Vagrant

Isso deve funcionar com DMG contendo:

  • .aplicativo
  • .pkg
  • .mpkg

Sinceramente, não o fiz melhor simplesmente porque sou preguiçoso. Por exemplo, eu realmente deveria especificar o caminho do aplicativo ou pacote a ser instalado como um argumento, ou torná-lo selecionável por meio de um readcomando. Sinta-se à vontade para fazer essas modificações e me avise sobre isso 🙂