Mise à niveau de tous les fûts installés via Homebrew Cask
J'utilise Homebrew Cask pour installer des applications sur OS X. Comment mettre à jour tous les casks installés?
16 réponses
Mise À Jour De Décembre 2017
Je pensais que cela n'arriverait jamais, mais il y a enfin un mécanisme de mise à niveau officiel pour homebrew Cask (voir Numéro 3396 pour l'implémentation)! Pour l'utiliser, exécutez simplement cette commande:
brew cask upgrade
Cependant, cela ne mettra pas à jour les casks qui n'ont pas d'informations de version (version :latest
) ou les applications qui ont un mécanisme de mise à niveau intégré (auto_updates true
). Pour réinstaller ces fûts (et par conséquent les mettre à niveau si les mises à niveau sont disponible), exécutez la commande de mise à niveau avec l'indicateur --greedy
comme ceci:
brew cask upgrade --greedy
Mars 2017 mise à Jour (notez le jeu de mots ;) (@polo)
J'ai trouvé quelques mises à jour puisque cela a été répondu à l'origine.
Pour une solution de contournement, vous pouvez maintenant utiliser brew cask reinstall
:
brew cask reinstall <cask_name>
brew cask list | xargs brew cask reinstall
Le numéro 4678 mentionné dans la réponse originale a été fermé et la fonctionnalité de mise à niveau est maintenant discutée dans Numéro # 29301 Il y a aussi buo / homebrew-cask-upgrade , un paquet externe qui ajoute commande de mise à niveau pour brew cask. Je l'ai testé sur quelques paquets avec succès.
Réponse Originale À Cette Question
Il n'existe pas de méthode officielle pour la mise à niveau des fûts homebrew. C'est en cours d'élaboration, mais il est encore très loin de son achèvement. Voir Numéro # 4678 pour plus de détails. Ce problème a également quelques exemples de scripts que les utilisateurs utilisent pour mettre à niveau tous leurs casks. Le moyen le plus simple de mettre à niveau un seul fût serait d'exécuter brew cask install --force <cask_name>
, mais sachez simplement qu'il existe un chance cela peut causer des problèmes avec votre application car elle ne sera pas correctement désinstallée en premier. Habituellement ce n'est pas un problème cependant.
Vous pouvez mettre à niveau tous les fûts installés à l'aide de la commande shell suivante:
brew cask list | xargs brew cask install --force
Pour référence future, plus de détails peuvent être trouvés dans le problème duplicate sur github .
Homebrew-fût-mise à niveau de
Je pense que c'est de loin la meilleure solution pour mettre à niveau les fûts.
source: https://github.com/buo/homebrew-cask-upgrade
Installation et utilisation
brew tap buo/cask-upgrade
brew update
brew cu
(facultatif) forcer la mise à niveau des applications obsolètes, y compris celles marquées comme les plus récentes:
brew cu --all
Il est possible de lister les fûts installés avec:
brew cask list
Et forcer la réinstallation d'un fût avec:
brew cask install --force CASK_NAME
Donc, en envoyant la sortie de la première commande dans la seconde, nous mettons à jour tous les fûts:
brew cask list | xargs brew cask install --force
Script Bash pour mettre à niveau les paquets
inspiré par Pascal réponse
#!/usr/bin/env bash
(set -x; brew update;)
(set -x; brew cleanup;)
(set -x; brew cask cleanup;)
red=`tput setaf 1`
green=`tput setaf 2`
reset=`tput sgr0`
casks=( $(brew cask list) )
for cask in ${casks[@]}
do
version=$(brew cask info $cask | sed -n "s/$cask:\ \(.*\)/\1/p")
installed=$(find "/usr/local/Caskroom/$cask" -type d -maxdepth 1 -maxdepth 1 -name "$version")
if [[ -z $installed ]]; then
echo "${red}${cask}${reset} requires ${red}update${reset}."
(set -x; brew cask uninstall $cask --force;)
(set -x; brew cask install $cask --force;)
else
echo "${red}${cask}${reset} is ${green}up-to-date${reset}."
fi
done
Ce qu'il n'
- mise à jour Brew / Brew cask, nettoyage
- lire la liste des fûts
- vérifiez le
brew cask info
pour la nouvelle version - installer la nouvelle version si disponible (et supprime toutes les anciennes versions!)
Source: https://gist.github.com/atais/9c72e469b1cbec35c7c430ce03de2a6b
Un doublure pour impatient:
curl -s https://gist.githubusercontent.com/atais/9c72e469b1cbec35c7c430ce03de2a6b/raw/36808a0544628398f26b48f7a3c7b309872ca2c6/cask_upgrade.sh | bash /dev/stdin
Enregistrer sous /usr/local/bin/cask-upgrade
, si vous pouvez l'exécuter localement comme cask-upgrade
plus tard
À partir de décembre 2017 utiliser: brew fût mise à niveau
[obsolète depuis décembre 2017 lorsque Homebrew a introduit la commande de mise à niveau pour cask]
J'utilise simplement ce qui suit:
brew cask outdated | xargs brew cask reinstall
Voici la fonction que j'ai écrite pour gérer cela. Notez que personnellement, je ne voulais pas simplement tout réinstaller aveuglément puisque certains des fûts que j'utilise prennent un certain temps à installer ou nécessitent une invite supplémentaire.
brew-cask-upgrade() {
if [ "$1" != '--continue' ]; then
echo "Removing brew cache"
rm -rf "$(brew --cache)"
echo "Running brew update"
brew update
fi
for c in $(brew cask list); do
echo -e "\n\nInstalled versions of $c: "
ls /opt/homebrew-cask/Caskroom/$c
echo "Cask info for $c"
brew cask info $c
select ynx in "Yes" "No" "Exit"; do
case $ynx in
"Yes") echo "Uninstalling $c"; brew cask uninstall --force "$c"; echo "Re-installing $c"; brew cask install "$c"; break;;
"No") echo "Skipping $c"; break;;
"Exit") echo "Exiting brew-cask-upgrade"; return;;
esac
done
done
}
Basé sur la réponse de @Atais, j'ai amélioré sa logique en quelque chose de plus agréable. Je voulais un moyen d'inspecter les paquets à mettre à niveau en premier, avant de forcer la mise à niveau.
-
$ brew-cask.sh
répertorie simplement une sortie similaire à celle de Homebrewbrew update
. - la liste ci-dessus montre tous les paquets installés, avec un
✔
vert indiquant les mises à jour en attente. - {[6] } forcera la mise à niveau de ces paquets.
Code:
# Usage:
#
# $ brew update
# You should execute this first to update everything locally.
#
# $ brew-cask.sh [update]
# This will list all of your cask packages and rather there is an upgrade
# pending with a ✔ checkmark, just like Homebrew does with "brew update".
# The update command is optional, as it doesn't actually do any tracking, there's
# not really anything to "update" with cask. But it keeps with the pattern of
# of Homebrew's "brew update" pattern for those with memory muscle fingers (like me).
#
# $ brew-cask.sh upgrade
# This performs a "brew cask install <cask> --force" of all cask packages that have
# an update pending.
#
# This code was inspired by http://stackoverflow.com/a/36000907/56693
# get the list of installed casks
casks=( $(brew cask list) )
if [[ "$1" == "upgrade" ]]; then
for cask in ${casks[@]}; do
current="$(brew cask info $cask | sed -n '1p' | sed -n 's/^.*: \(.*\)$/\1/p')"
installed=( $(ls /opt/homebrew-cask/Caskroom/$cask))
if (! [[ " ${installed[@]} " == *" $current "* ]]); then
echo "Upgrading $cask to v$current."
(set -x; brew cask install $cask --force;)
else
echo "$cask v$current is up-to-date, skipping."
fi
done
else
echo "Inspecting ${#casks[@]} casks. Use 'brew-cask.sh upgrade' to perform any updates."
for (( i = i ; i < ${#casks[@]} ; i++ )); do
current="$(brew cask info ${casks[$i]} | sed -n '1p' | sed -n 's/^.*: \(.*\)$/\1/p')"
installed=( $(ls /opt/homebrew-cask/Caskroom/${casks[$i]}))
if (! [[ " ${installed[@]} " == *" $current "* ]]); then
casks[$i]="${casks[$i]}$(tput sgr0)$(tput setaf 2) ✔$(tput sgr0)"
fi
done
echo " ${casks[@]/%/$'\n'}" | column
fi
Il suffit de l'installer (aka " j'ai besoin - en dès maintenant!")
, Il est vérifié dans mon .dotfiles
repo; ainsi, vous pouvez l'installer rapidement dans votre ~/bin
, avec:
$ curl -L https://raw.githubusercontent.com/eduncan911/dotfiles/master/bin/brew-cask.sh --create-dirs -o ~/bin/brew-cask.sh
$ chmod 755 ~/bin/brew-cask.sh
Ensuite, utilisez-le comme ceci:
$ brew-cask.sh
$ brew-cask.sh upgrade
Si vous n'avez pas ~/bin
dans votre chemin, préfixe ~/bin/
aux instructions ci-dessus.
Je pense utiliser
brew cask reinstall `brew cask outdated`
Fera l'affaire. Cela permettra également de supprimer la version précédente de l'application et installer la version la plus récente.
brew cask upgrade
La commande upgrade
a récemment été introduite dans Homebrew Cask et devrait déprécier toutes les autres méthodes manuelles décrites dans les autres réponses.
Amélioration sur le code fourni à partir de deinspanjer, j'ai essayé d'imiter une commande noop, un peu comme celui de chocolaté (choco mise à jour --noop / choco obsolète).
#!/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
Comme on peut le voir, j'utilise une approche modulaire puisque mon cas d'utilisation diffère un peu. Je ne veux pas m'asseoir devant mon ordinateur et taper oui / non pour chaque application que j'ai installée. Bien qu'il n'y ait pas de véritable moyen de mettre à niveau les fûts (juste la réinstallation du plus récent version), je fais d'abord brew update pour avoir l'information qu'il y a réellement des mises à jour disponibles.
Ensuite, je fais défiler tous les fûts pour afficher leurs informations. Parce que j'ai fait la mise à jour de brew avant, on est maintenant fourni avec l'information que la dernière version de Some cask n'est pas installée.
Dans ma méthode de mise à jour, j'analyse réellement la commande info pour cette ligne spécifique:
lookup | grep -B 3 'Not installed' | sed -e '/^http/d;/^Not/d;/:/!d' | cut -d ":" -f1
Qui se traduit par: "donnez les 3 lignes ci-dessus des informations fournies chaque fois que vous lire la ligne "non installé". Ensuite, supprimez toute ligne contenant un lien, supprimez également une ligne contenant un':'."
Compte tenu de la structure de la commande Brew cask info, nous nous retrouvons avec une ligne (pas d'informations de version, pas D'URL d'application), qui reflète le nom réel du fût avec lequel il a également été installé.
Dans ma version, cette information est maintenant imprimée afin que l'on puisse facilement voir quels fûts sont obsolètes et pourraient être mis à jour.
À ce point je fais un cas de commutateur, parce que peut-être en ce moment n'est pas assez de temps pour mettre à jour les choses. Cela dépend de votre cas d'utilisation. Pour moi, je veux parfois juste voir ce qui est nouveau (en attendant une nouvelle version, un bugfix) mais je n'ai pas vraiment le temps de mettre à jour les choses parce que pour le moment je ne veux pas fermer mon navigateur, etc.
Donc, si l'on opte pour "oui", la liste des noms nettoyés des fûts est donnée à la fonction de mise à jour où pour chaque fûts qui a été déterminé comme obsolète, la réinstallation est émettre.
Merci encore à deinspanjer, tout en essayant de résoudre ce problème pour moi-même, j'ai toujours oublié d'émettre une mise à jour de brew à l'avance, donc il n'y avait pas de ligne "non installée" pour analyser (le fondement de toute mon approche).
J'espère que cela a été utile.
J'ai fait un tel script par moi-même. Veuillez regarder le github https://github.com/pesh1983/brew_cask_upgrade . Il a une assez bonne description, mais si vous avez une question supplémentaire, n'hésitez pas à me demander. Il fait une mise à niveau équitable: désinstaller et installer, de sorte que tout nettoyage nécessaire sera effectué par' brew ' lui-même.
Obtenir des fûts obsolètes:
Brew fût dépassée
Mise à niveau fût:
Brew cask réinstaller obsolète-cask
Script de démonstration:
$ cat ~/bin/brew_cask_upgrade.sh
#!/bin/bash
red=$(tput setaf 1)
# green=$(tput setaf 2)
reset=$(tput sgr0)
(set -x; brew update;)
for cask in $(brew cask outdated | awk '{print $1}')
do
echo "${red}update ${cask} ...${reset}."
(set -x; brew cask install --force "$cask";)
done
echo "${red}brew clean up ...${reset}"
(set -x; brew cask cleanup;)
echo "${red}brew clean up done.${reset}"
Sur la base de ce que j'ai lu, j'ai créé un script qui va créer un fichier qui répertorie les fichiers à mettre à jour, y compris les applications définies comme dernières. Vous pouvez ensuite modifier le fichier en fonction de vos besoins et installer des mises à jour à l'aide de mon script olinst.
Pour plus d'informations visitez mon github.
Cela m'a vraiment énervé, alors j'ai créé ce script pour mettre à jour toutes les applications Brew et permettre à l'utilisateur de choisir les applications Cask à mettre à jour. Vous pouvez également exclure les applications de la considération.
Https://github.com/derrekyoung/ScriptsAndUtils/blob/master/brew-cask-upgrade.sh