我是 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