deinspanjerから提供されたコードを改善して、chocolateyのコマンド(choco update --noop / choco outdated)と同じように、noopコマンドを模倣しようとしました。
https://git.io/vgjiL
#!/bin/sh
fetch(){
echo "Removing brew cache"
rm -rf "$(brew --cache)"
echo "Running brew update"
brew update
}
lookup() {
for c in $(brew cask list); do
brew cask info $c
done
}
update(){
var=$( lookup | grep -B 3 'Not installed' | sed -e '/^http/d;/^Not/d;/:/!d' | cut -d ":" -f1)
if [ -n "$var" ]; then
echo "The following installed casks have updates avilable:"
echo "$var"
echo "Install updates now?"
select yn in "Yes" "No"; do
case $yn in
"Yes") echo "updating outdated casks"; break;;
"No") echo "brew cask upgrade cancelled" ;return;;
*) echo "Please choose 1 or 2";;
esac
done
for i in $var; do
echo "Uninstalling $c"; brew cask uninstall --force "$i"; echo "Re-installing $i"; brew cask install "$i"
done
else
echo "all casks are up to date"
fi
}
fetch
update
ご覧のとおり、ユースケースが少し異なるため、モジュール方式を使用しています。コンピューターの前に座って、インストールしたすべてのアプリに対してyes / noと入力したくありません。キャスクをアップグレードする実際の方法はありませんが(最新バージョンを再インストールするだけです)、実際に利用可能なアップデートがあるという情報を入手するために、まずbrew updateを実行します。
次に、すべてのキャスクを循環して、それらの情報を表示します。以前にbrewの更新を行ったため、一部のcaskの最新バージョンがインストールされていないという情報が提供されます。
私の更新メソッド内では、実際にその特定の行のinfoコマンドを解析します。
lookup | grep -B 3 'Not installed' | sed -e '/^http/d;/^Not/d;/:/!d' | cut -d ":" -f1
これは、「インストールされていない」という行を読むときは常に、上記の3行の情報を提供します。次に、リンクが含まれている行を削除し、「:」が含まれている行も削除します。
brew cask infoコマンドの構造を考えると、1行(バージョン情報なし、アプリURLなし)で終わります。これは、インストールされたcaskの実際の名前を反映しています。
醸造キャスク情報出力
私のバージョンでは、この情報が印刷されるので、どのキャスクが古く、更新できるかを簡単に確認できます。
現時点では、状況を更新するのに十分ではないため、この時点でケースを切り替えます。それはあなたのユースケースに依存します。私にとって、私は時々新しいものを見たいだけです(新しいバージョン、バグ修正を待っています)が、今はブラウザーなどを閉じたくないので、実際に更新する時間はありません。
したがって、「はい」を選択した場合、クリーンアップされたキャスクの名前のリストが更新機能に渡され、古くなっていると判断された各キャスクに対して再インストールが発行されます。
deinspanjerのおかげで、この問題を自分で解決しようとしている間、私は常に事前にbrew updateを発行するのを忘れていたため、実際に解析する「インストールされていない」行はありませんでした(私の全体的なアプローチの基礎)。
これがお役に立てば幸いです。