最近重装了mac系统,在解决dotfile的时候突发奇想能否用脚本安装软件。
虽然强大的homebrew-cask已经涵盖了大部分的软件。
直接一句brew cask install XXX就会自动下载dmg文件,自动安装,看起来蛮简单的样子
但是缺陷还是有的,这种安装方式肯定要涉及到版权问题,比如我们需要的很多都是和谐版软件。所以只能自己造车。
目前造了一部分的车,先写出来玩玩
支持安装两种类型的软件
一种的zip - 其实就是解压缩,复制到/Applications
一种是dmg - 就是挂载DMG镜像、复制到/Applications、然后卸载镜像
#!/bin/sh
cd $(cd `dirname $0`; pwd)
install_dmg(){
hdiutil attach $1 -nobrowse
cp -rf /Volumes/$2/$3 /Applications
hdiutil detach /Volumes/$2
}
install_zip(){
unzip -o $1/$2 -d $1
mv -f $1/$3 /Applications
rm -r $1/__MACOSX
}
# 传三个参数 1、相对路径下的dmg文件。2、挂载后的磁盘镜像名称。3、镜像内的APP名字
install_dmg "QQ/QQ_V6.0.1.dmg" "QQ" "QQ.app"
sleep 1
#传三个参数 1、相对路径的文件夹名。2、zip压缩包名。3、解压后的APP名
install_zip "Dropbox" "Dropbox.zip" "Dropbox.app"
⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️
hdiutil 挂载 dmg镜像,当存在License时需要手动关闭,并输入Y继续,因此使用exexpect优化了一下脚本。
创建一个MountDmg.sh的文件,用来执行交互操作
#!/usr/bin/expect
# MountDmg.sh
set timeout 30
spawn hdiutil attach [lindex $argv 0] -nobrowse
expect ":"
send "q"
expect "Agree Y/N?"
send "Y\r"
interact
再写个脚本挂载dmg镜像
install_dmg(){
#挂载dmg
./MountDmg.sh $1
#复制app
cp -rf /Volumes/"$2"/*.app /Applications
#卸载dmg
hdiutil detach /Volumes/"$2"
}
#使用 参数1文件名,参数2挂载后的dmg名
#install_dmg QQ_V6.1.1.dmg QQ