migliorando il codice fornito da deinspanjer, ho cercato di imitare un comando noop, proprio come quello di chocolatey ( aggiornamento choco --noop / choco obsoleto ).
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
Come si può vedere, sto usando un approccio modulare poiché il mio caso d'uso differisce leggermente. Non voglio sedermi di fronte al mio computer e digitare yes / no per ogni app che ho installato. Anche se non esiste un modo reale di aggiornare i barili (solo la reinstallazione della versione più recente), per prima cosa eseguo l'aggiornamento per avere le informazioni che ci sono effettivamente aggiornamenti disponibili .
Successivamente, scorro tutte le botti per visualizzare le loro informazioni. Dato che ho già fatto l'aggiornamento in precedenza, ora viene fornita l'informazione che l'ultima versione di alcuni cask non è installata.
All'interno del mio metodo di aggiornamento, in realtà analizzo il comando info per quella riga specifica:
lookup | grep -B 3 'Not installed' | sed -e '/^http/d;/^Not/d;/:/!d' | cut -d ":" -f1
Il che si traduce in: "Fornisci le 3 righe sopra delle informazioni fornite ogni volta che leggi la riga" non installata ". Quindi elimina tutte le righe che contengono un link, elimina anche una riga che contenga un": "."
Data la struttura del comando info cask brew, finiamo con una riga (nessuna informazione sulla versione, nessun URL dell'app), che riflette il nome effettivo della cask con cui è stato installato.
produrre informazioni sulla botte
Nella mia versione, queste informazioni sono ora stampate in modo da poter vedere facilmente quali barili non sono aggiornati e potrebbero essere aggiornati.
A questo punto faccio uno switch case, perché forse in questo momento non è abbastanza tempo per aggiornare le cose. Dipende dal tuo caso d'uso. Per me, a volte voglio solo vedere cosa c'è di nuovo (aspettando una nuova versione, una correzione di bug) ma in realtà non ho tempo di aggiornare le cose perché in questo momento non voglio chiudere il mio browser ecc.
Quindi, se si opta per "sì", l'elenco di nomi puliti di botti viene dato alla funzione di aggiornamento in cui per ogni botte che è stato giudicato obsoleto viene emessa la reinstallazione.
Grazie ancora a deinspanjer, mentre cercavo di risolvere questo problema da solo, ho sempre dimenticato di inviare in anticipo l'aggiornamento della birra, quindi non c'era una linea "non installata" per analizzare effettivamente (le basi del mio intero approccio).
Spero sia stato utile.