简单的下载/安装脚本(OS X)可能会更好

简单的下载/安装脚本(OS X)可能会更好

我是 shell 脚本 (OS X) 的新手,决定尝试一下下载和安装 Chrome 的基本脚本。

#!/bin/bash -x

cd ~/Downloads
curl -O https://dl.google.com/chrome/mac/stable/CHFA/googlechrome.dmg
open ~/Downloads/googlechrome.dmg && sleep 10
cp -R /Volumes/Google\ Chrome/Google\ Chrome.app /Applications && open 
/Applications/Google\ Chrome.app
diskutil eject Google\ Chrome

剧本技术上有效,但仅仅是因为sleep 10我放入其中,并且仅仅因为 dmg 恰好在 10 秒内启动(在现实世界中并不总是如此)。

我尝试将open和链接cp在一起&&,但这不起作用,并且出现 /Volumes/Google\ Chrome/Google\ Chrome.app 不存在的错误(因为上一个命令尚未完全完成) )。

我不认为这个脚本会有很多有用的应用程序;再说一次,我只是想学习,但我只是想知道是否有更好的方法来解决这个问题。

谢谢!

答案1

这可以修改为使用“我们到了吗?”进行健全性检查而不是睡六分之一分钟:

#!/bin/bash -x

cd ~/Downloads
curl -O https://dl.google.com/chrome/mac/stable/CHFA/googlechrome.dmg
open ~/Downloads/googlechrome.dmg
while ! [[ -d /Volumes/Google\ Chrome/ ]]; do
   sleep 1
done
cp -R /Volumes/Google\ Chrome/Google\ Chrome.app /Applications && open 
/Applications/Google\ Chrome.app
diskutil eject Google\ Chrome

然而,如果.dmg无法安装或由于某种原因安装到另一个位置,这将旋转它的轮子,直到时间结束。

不过,比将其交给我们要好一些open(这只是要求 Finder 假装我们双击了该文件),让我们自己挂载它:

#!/bin/bash -x
cd ~/Downloads
curl -O https://dl.google.com/chrome/mac/stable/CHFA/googlechrome.dmg
set -o pipefail
if mountpoint=$(hdiutil attach googlechrome.dmg | awk 'END { print $1 }'; then
   cp -R /Volumes/Google\ Chrome/Google\ Chrome.app /Applications && open 
   /Applications/Google\ Chrome.app
   hdiutil detach "$mountpoint"
fi

相关内容