Нужен скрипт bash для автоматизации надоедливого процесса установки загруженного приложения .DMG - PullRequest
0 голосов
/ 04 сентября 2011

Я пытаюсь автоматизировать утомительный процесс установки приложения, который поставляется с файлами .DMG.

Мне нужен скрипт bash, который будет:

  1. Смонтировать последний загруженный файл .dmgфайл в каталоге ~/Downloads.
  2. Скопируйте файл .app внутри него в каталог / Applications.
  3. Размонтирует и удалит указанный файл .DMG.

Я в значительной степени Noob скриптов Bash, но я думаю, что преимущества этого скрипта должны быть очевидны.Я посмотрел вокруг Google и не нашел решения этой проблемы, что является позором.Давайте сделаем один.

Этот ответ обеспечивает довольно хорошее начало, но недостаточно автоматизирован.

Ответы [ 2 ]

6 голосов
/ 04 сентября 2011

Что ты скучаешь?Я думаю, что отсутствует только одна вещь, чтобы найти приложение и скопировать его в каталог /Application/.

MOUNTPOINT="/Volumes/MountPoint"
IFS="
"
hdiutil attach -mountpoint $MOUNTPOINT <filename.dmg>

for app in `find $MOUNTPOINT -type d -maxdepth 2 -name \*.app `; do
  cp -a "$app" /Applications/
done

hdiutil detach $MOUNTPOINT

Конечно, вам нужно установить <filename.dmg> в пункт назначенияфайл DMG.Это может быть первый аргумент или что-то в этом роде.

2 голосов
/ 05 сентября 2011

Я только что создал скрипт ruby, который делает это довольно хорошо.

#!/usr/bin/env ruby

require 'fileutils'
require 'pathname'
include FileUtils

#go to downloads directory
puts "installing most recent .dmg"
cd File.expand_path("~/Downloads/")
path = Pathname.new('.')

#find most recent .dmg file
files = path.entries.collect { |file| path+file }.sort { |file1,file2| file1.ctime <=> file2.ctime }
files.reject! { |file| ((file.file? and file.to_s.include?(".dmg")) ? false : true) }
last_dmg = files.last

#if there is no .dmg file then reject this.
if !last_dmg
  puts "No DMG files" 
  exit
end

puts "Mounting #{last_dmg}"

mount_point = Pathname.new "/Volumes/#{last_dmg}"

result = `hdiutil attach -mountpoint #{mount_point}  #{last_dmg}`

#find any apps in the mounted dmg
files = mount_point.entries.collect { |file| mount_point+file }
files.reject! { |file| ((file.to_s.include?(".app")) ? false : true) }

files.each { |app| 
  puts "Copying #{app} to Applications folder"
  `cp -a #{app} /Applications/` 
}

#unmount the .dmg
puts "Unmounting #{last_dmg}"
result = `hdiutil detach #{mount_point}`
puts "Finished installing #{last_dmg}"


#delete the .dmg
rm last_dmg 

Отличное расширение для Альфреда http://cl.ly/391x0A0D0l2q0s0t3z2f

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...