Как я могу установить MacOS .app из dmg, используя одну команду? - PullRequest
0 голосов
/ 26 апреля 2019

Я пишу средство автоматического обновления для моего кроссплатформенного приложения. Часть программы обновления загружает файл установщика и выполняет команду оболочки для его установки. На MacOS наш «установщик» принимает форму файла .dmg. Мне нужно иметь возможность без труда смонтировать образ диска, скопировать / перезаписать содержащиеся .app в папку назначения, а затем размонтировать образ диска. Я предполагаю, что образ диска содержит пакет, который может быть непосредственно скопирован в /Applications или в другое место. Не существует разумного способа обработать произвольный .dmg файл, как , заданный ранее , так как его содержимое не может быть известно. Некоторые предположения должны быть сделаны.

1 Ответ

0 голосов
/ 26 апреля 2019
VOLUME=$(hdiutil attach -nobrowse '[DMG FILE]' |
    awk 'END {print $3}'; exit ${PIPESTATUS[0]}) &&
(rsync -a "$VOLUME"/*.app /Applications/; SYNCED=$?
    hdiutil detach -quiet "$VOLUME"; exit $? || exit "$SYNCED")

Я разобью это:

  • hdiutil attach -nobrowse '[DMG FILE]' Смонтируйте образ диска, но не показывайте его на рабочем столе
  • | awk 'END {print $3}' Извлекитетретий токен из последней строки вывода hdiutil, который представляет собой подключенный том
  • VOLUME=$(...; exit ${PIPESTATUS[0]}) Установите VOLUME на выход вышеупомянутого и установите код выхода равный hdiutil
  • && Если образ диска был успешно смонтирован ...
  • rsync -a "$VOLUME"/*.app /Applications/ ... используйте rsync для копирования файлов .app в каталог /Applications, сохраняя права доступа / символические ссылки / владельца и т. Д..
  • ; SYNCED=$? Сохранить результат операции rsync
  • hdiutil detach -quiet "$VOLUME" размонтировать образ диска
  • exit $? || "$SYNCED" Выход с кодом выхода hdiutil или код выхода rsync, если hdiutil завершился успешно
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...