poprawiając dostarczony kod z deinspanjer, próbowałem naśladować polecenie noop, podobnie jak to z chocolatey ( aktualizacja choco --noop / choco nieaktualne ).
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
Jak widać, używam podejścia modułowego, ponieważ mój przypadek użycia trochę się różni. Nie chcę siedzieć przed komputerem i wpisywać tak / nie dla każdej zainstalowanej aplikacji. Chociaż nie ma prawdziwego sposobu na aktualizację beczek (wystarczy przeinstalować najnowszą wersję), najpierw wykonuję aktualizację parzenia, aby mieć informacje, że faktycznie są dostępne aktualizacje .
Następnie przechodzę przez wszystkie beczki, aby wyświetlić ich informacje. Ponieważ wcześniej przygotowałem aktualizację, teraz pojawia się informacja, że najnowsza wersja niektórych beczek nie jest zainstalowana.
W ramach mojej metody aktualizacji faktycznie analizuję polecenie info dla tej konkretnej linii:
lookup | grep -B 3 'Not installed' | sed -e '/^http/d;/^Not/d;/:/!d' | cut -d ":" -f1
Co przekłada się na: „Podaj 3 linie powyżej informacji podanych za każdym razem, gdy przeczytasz wiersz„ nie zainstalowano ”. Następnie usuń każdą linię, która ma w niej łącze, usuń również linię, w której znajduje się znak ':'."
Biorąc pod uwagę strukturę polecenia brew cask info, otrzymujemy jedną linię (bez informacji o wersji, bez adresu URL aplikacji), która odzwierciedla rzeczywistą nazwę beczki, z którą również została zainstalowana.
wyjście informacji o zaparzeniu beczki
W mojej wersji te informacje są teraz drukowane, dzięki czemu można łatwo zobaczyć, które beczki są nieaktualne i można je zaktualizować.
W tym momencie robię przypadek przełącznika, ponieważ może teraz nie ma wystarczająco dużo czasu na aktualizację. To zależy od twojego przypadku użycia. Dla mnie czasami po prostu chcę zobaczyć, co nowego (czekanie na nową wersję, naprawę błędu), ale tak naprawdę nie mam czasu na aktualizację, ponieważ w tej chwili nie chcę zamykać przeglądarki itp.
Więc jeśli ktoś zdecyduje się na „tak”, lista wyczyszczonych nazw beczek jest przekazywana do funkcji aktualizacji, gdzie dla każdej beczki, która została uznana za nieaktualną, jest wydawana ponowna instalacja.
Jeszcze raz dziękuję deinspanjerowi, próbując samemu rozwiązać ten problem, zawsze zapominałem o wcześniejszym wydaniu aktualizacji naparu, więc nie było tam „niezainstalowanej” linii do przetworzenia (podstawa mojego podejścia).
Mam nadzieję, że to było pomocne.