mejorando el código proporcionado por deinspanjer, traté de imitar un comando noop, muy parecido al de chocolatey ( actualización de choco --noop / choco desactualizado ).
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
Como se puede ver, estoy usando un enfoque modular ya que mi caso de uso difiere un poco. No quiero sentarme frente a mi computadora y escribir sí / no para cada aplicación que haya instalado. Si bien no hay una forma real de actualizar los barriles (solo reinstalar la versión más reciente), primero preparo la actualización para tener la información de que realmente hay actualizaciones disponibles .
A continuación, recorro todos los barriles para mostrar su información. Debido a que preparé la actualización antes, ahora se proporciona una con la información de que la última versión de cask no está instalada.
Dentro de mi método de actualización, en realidad analizo el comando de información para esa línea específica:
lookup | grep -B 3 'Not installed' | sed -e '/^http/d;/^Not/d;/:/!d' | cut -d ":" -f1
Lo que se traduce en: "Proporcione las 3 líneas anteriores de la información proporcionada cada vez que lea la línea" no instalada ". Luego elimine cualquier línea que tenga un enlace, también elimine una línea que tenga un ':' en ella".
Dada la estructura del comando de información brew cask, terminamos con una línea (sin información de versión, sin URL de aplicación), que refleja el nombre real del barril con el que también se instaló.
salida de información de barril de cerveza
En mi versión, esta información ahora se imprime para que uno pueda ver fácilmente qué barriles están desactualizados y podrían actualizarse.
En este punto hago un caso de cambio, porque tal vez en este momento no hay suficiente tiempo para actualizar las cosas. Depende de su caso de uso. Para mí, a veces solo quiero ver qué hay de nuevo (esperando una nueva versión, una corrección de errores) pero en realidad no tengo tiempo para actualizar las cosas porque en este momento no quiero cerrar mi navegador, etc.
Por lo tanto, si uno opta por "sí", la lista de nombres limpios de los barriles se proporciona a la función de actualización donde se emite la reinstalación de cada barril que se determinó que estaba desactualizado.
Gracias de nuevo a deinspanjer, mientras trataba de resolver este problema por mí mismo, siempre olvidé emitir una actualización de preparación de antemano, por lo que no había una línea "no instalada" para analizar realmente (la base de todo mi enfoque).
Espero que esto haya sido útil.