улучшая предоставленный код от deinspanjer, я попытался имитировать команду noop, очень похожую на команду из chocolatey ( обновление choco --noop / choco устарело ).
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
Как видите, я использую модульный подход, поскольку мой вариант использования немного отличается. Я не хочу сидеть перед моим компьютером и вводить да / нет для каждого приложения, которое я установил. Хотя нет реального способа обновления бочек (просто переустановите последнюю версию), я сначала делаю brew update, чтобы получить информацию о том, что обновления действительно доступны .
Затем я перебираю все бочки, чтобы отобразить их информацию. Поскольку раньше я делал brew update, теперь одному предоставляется информация о том, что последняя версия некоторых бочек не установлена.
Внутри моего метода обновления я фактически анализирую команду info для этой конкретной строки:
lookup | grep -B 3 'Not installed' | sed -e '/^http/d;/^Not/d;/:/!d' | cut -d ":" -f1
Что означает: «Дайте 3 строки выше информации, предоставленной всякий раз, когда вы читаете строку« не установлено ». Затем удалите любую строку, содержащую ссылку в ней, а также удалите строку, содержащую«: »в ней».
Учитывая структуру команды brew cask info, мы получаем одну строку (без информации о версии, без URL-адреса приложения), которая отражает фактическое имя контейнера, с которым оно также было установлено.
вывод информации о бочке
В моей версии эта информация теперь распечатана, поэтому можно легко увидеть, какие бочки устарели и могут быть обновлены.
На данный момент я делаю переключение случая, потому что, может быть, сейчас не хватает времени, чтобы обновить вещи. Это зависит от вашего варианта использования. Что касается меня, я иногда просто хочу посмотреть, что нового (ожидание новой версии, исправление ошибки), но на самом деле у меня нет времени на обновление, потому что сейчас я не хочу закрывать свой браузер и т. Д.
Поэтому, если выбрано «да», список очищенных имен контейнеров передается в функцию обновления, где для каждого контейнера, который был определен как устаревший, выдается переустановка.
Еще раз спасибо deinspanjer, пытаясь решить эту проблему для себя, я всегда забывал заранее выпускать обновление brew, так что там не было строки «не установлено», чтобы фактически разобрать (основа всего моего подхода).
Я надеюсь, что это было полезно.