Als ich den von deinspanjer bereitgestellten Code verbesserte, versuchte ich, einen noop-Befehl zu imitieren, ähnlich dem vonocolatey ( choco update --noop / choco veraltet ).
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
Wie man sieht, verwende ich einen modularen Ansatz, da sich mein Anwendungsfall ein wenig unterscheidet. Ich möchte nicht vor meinem Computer sitzen und für jede installierte App Ja / Nein eingeben. Obwohl es keine echte Möglichkeit gibt, Fässer zu aktualisieren (nur die neueste Version neu zu installieren), brühe ich zuerst ein Update, um die Information zu erhalten, dass tatsächlich Updates verfügbar sind .
Als nächstes gehe ich durch alle Fässer, um ihre Informationen anzuzeigen. Da ich zuvor ein Update durchgeführt habe, wird jetzt die Information bereitgestellt, dass die neueste Version eines Fasses nicht installiert ist.
Innerhalb meiner Aktualisierungsmethode analysiere ich tatsächlich den Befehl info für diese bestimmte Zeile:
lookup | grep -B 3 'Not installed' | sed -e '/^http/d;/^Not/d;/:/!d' | cut -d ":" -f1
Dies bedeutet: "Geben Sie die 3 obigen Zeilen der bereitgestellten Informationen an, wenn Sie die Zeile" nicht installiert "lesen. Löschen Sie dann alle Zeilen, in denen ein Link enthalten ist, und löschen Sie auch eine Zeile mit einem ':'."
In Anbetracht der Struktur des Befehls "Brew Cask Info" erhalten wir eine Zeile (keine Versionsinfo, keine App-URL), die den tatsächlichen Namen des Fasses widerspiegelt, mit dem es auch installiert wurde.
Ausgabe der Brühfassinfo
In meiner Version sind diese Informationen jetzt ausgedruckt, sodass man leicht erkennen kann, welche Fässer veraltet sind und aktualisiert werden könnten.
An dieser Stelle mache ich einen Switch-Fall, weil vielleicht gerade nicht genug Zeit ist, um Dinge zu aktualisieren. Dies hängt von Ihrem Anwendungsfall ab. Für mich möchte ich manchmal nur sehen, was neu ist (auf eine neue Version warten, einen Bugfix), aber eigentlich keine Zeit haben, Dinge zu aktualisieren, weil ich meinen Browser momentan nicht schließen möchte usw.
Wenn Sie sich also für "Ja" entscheiden, wird die Liste der gereinigten Namen der Fässer an die Aktualisierungsfunktion übergeben, in der für jedes Fass, das als veraltet eingestuft wurde, die Neuinstallation ausgegeben wird.
Nochmals vielen Dank an deinspanjer, als ich versuchte, dieses Problem für mich selbst zu lösen, vergaß ich immer, vorher ein Brew-Update herauszugeben, sodass es dort keine "nicht installierte" Zeile gab, die tatsächlich analysiert werden konnte (die Grundlage meines gesamten Ansatzes).
Ich hoffe das war hilfreich.