私はシェルスクリプト(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
6分の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