J'utilise Homebrew Cask pour installer des applications sur OS X. Comment puis-je mettre à niveau tous les fûts installés?
Mise à jour de décembre 2017
Je pensais que cela ne se produirait jamais, mais il existe enfin un mécanisme officiel de mise à niveau pour Homebrew Cask (voir numéro 3396 pour la mise en œuvre)! Pour l'utiliser, lancez simplement cette commande:
brew cask upgrade
Toutefois, cela ne mettra pas à jour les casks ne contenant pas d'informations de version (version :latest
) ni les applications dotées d'un mécanisme de mise à niveau intégré (auto_updates true
). Pour réinstaller ces casks (et par conséquent les mettre à niveau si des mises à niveau sont disponibles), exécutez la commande de mise à niveau avec l'indicateur --greedy
comme suit:
brew cask upgrade --greedy
Mise à jour de mars 2017 (attention au jeu de mots;) (@polo)
J'ai trouvé des mises à jour depuis la réponse initiale à cette question. Pour résoudre ce problème, vous pouvez maintenant utiliser brew cask reinstall
:
brew cask reinstall <cask_name> brew cask list | xargs brew cask reinstall
Le problème 4678 mentionné dans la réponse initiale était clos et la fonctionnalité de mise à niveau est maintenant décrite dans Problème n ° 29301 Il existe également buo/homebrew-cask-upgrade , un package externe qui ajoute Commande de mise à niveau vers le brassin Je l'ai testé sur quelques paquets avec succès.
Réponse originale
Il n'y a pas de méthode officielle pour améliorer les fûts homebrew. Nous travaillons actuellement sur cette question, mais nous en sommes encore très loin. Voir Issue # 4678 pour plus de détails. Ce problème contient également quelques exemples de scripts que les utilisateurs utilisent pour mettre à niveau tous leurs fûts. Le moyen le plus simple de mettre à niveau un seul cask consiste à exécuter brew cask install --force <cask_name>
, mais sachez qu'il est possible que cela pose des problèmes avec votre application car celle-ci ne sera pas correctement désinstallée en premier. Habituellement, ce n'est pas un problème cependant.
Vous pouvez mettre à niveau tous les casks installés à l'aide de la commande Shell suivante:
brew cask list | xargs brew cask install --force
Pour référence future, vous trouverez plus de détails dans le numéro en double sur github .
Je pense que c'est de loin la meilleure solution pour améliorer 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 la dernière:
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 canalisant la sortie de la première commande dans la seconde, nous mettons à jour tous les casks:
brew cask list | xargs brew cask install --force
inspiré par réponse Pascal
#!/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 que ça fait
brew cask info
pour la dernière versionsource: https://Gist.github.com/atais/9c72e469b1cbec35c7c430ce03de2a6b
un paquebot pour impatient:
curl -s https://Gist.githubusercontent.com/atais/9c72e469b1cbec35c7c430ce03de2a6b/raw/36808a0544628398f26b48f7a3c7b309872ca2c6/cask_upgrade.sh | bash /dev/stdin
enregistrez sous /usr/local/bin/cask-upgrade
, afin que vous puissiez l'exécuter localement en tant que cask-upgrade
plus tard
À partir de décembre 2017, utilisez: mise à niveau du fût de bière
[DEPRECATED depuis déc 2017 lorsque Homebrew a introduit la commande de mise à niveau pour le fût] J'utilise simplement les éléments suivants:
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 qu'il ré-installe aveuglément tout, car certains des fûts que j'utilise prennent un certain temps à installer ou nécessitent des invites supplémentaires.
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
}
brew cask upgrade
La commande upgrade
a récemment été introduite dans Homebrew Cask et devrait rendre obsolète toutes les autres méthodes manuelles décrites dans les autres réponses.
Je pense en utilisant
brew cask reinstall `brew cask outdated`
fera l'affaire. Cela aidera également à supprimer la version précédente/s de l'application et installera la version la plus récente.
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 avant de forcer la mise à niveau.
$ brew-cask.sh
liste simplement une sortie similaire à celle de brew update
de Homebrew.✔
vert indiquant les mises à jour en attente.$ brew-cask.sh upgrade
forcera la mise à jour 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 est vérifié dans mon .dotfiles
repo ; alors, vous pouvez l’installer rapidement dans votre ~/bin
with:
$ 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
Alors utilisez-le comme suit:
$ brew-cask.sh
$ brew-cask.sh upgrade
Si vous n'avez pas ~/bin
dans votre chemin, préfixez ~/bin/
aux instructions ci-dessus.
en améliorant le code fourni par deinspanjer, j'ai essayé d'imiter une commande noop, un peu comme celle de Chocolatey ( Mise à jour de choco --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 constater, j'utilise une approche modulaire car 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’existe aucun moyen réel de mettre à niveau les fûts (il suffit de réinstaller la version la plus récente), je commence à effectuer une mise à jour pour obtenir l’information indiquant que des mises à jour sont réellement disponibles .
Ensuite, je parcours tous les fûts pour afficher leurs informations. Étant donné que j'avais déjà mis à jour les breuvages auparavant, il est maintenant fourni aux informations que la dernière version de certains cask n'est pas installée.
Dans ma méthode de mise à jour, j'analyse en fait la commande info pour cette ligne spécifique:
lookup | grep -B 3 'Not installed' | sed -e '/^http/d;/^Not/d;/:/!d' | cut -d ":" -f1
Ce qui se traduit par: "Donnez les 3 lignes ci-dessus d'informations fournies chaque fois que vous lisez la ligne" non installée ". Supprimez ensuite toute ligne contenant un lien, supprimez également une ligne contenant un ':'."
Étant donné la structure de la commande info brass cask, 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 stade, je fais un cas de commutation, car peut-être que le moment n'est pas encore suffisant pour mettre à jour les choses. Cela dépend de votre cas d'utilisation. Pour moi, je veux parfois juste voir ce qu'il y a de nouveau (attendre une nouvelle version, une correction de bogue) mais je n'ai pas le temps de mettre à jour les choses car pour le moment je ne veux pas fermer mon navigateur, etc.
Par conséquent, si vous choisissez "oui", la liste des noms de fûts nettoyés est attribuée à la fonction de mise à jour. Pour chaque fût jugé périmé, la réinstallation est émise.
Encore une fois merci à deinspanjer, tout en essayant de résoudre ce problème par moi-même, j’ai toujours oublié de publier une mise à jour de la bière au préalable, de sorte qu’il n’y avait pas de ligne "non installée" à analyser (le fondement de toute mon approche).
J'espère que cela a été utile.
brew cask outdated | xargs brew cask reinstall --force
J'ai fait ce scénario par moi-même. Veuillez regarder le github https://github.com/pesh1983/brew_cask_upgrade . La description est assez bonne, mais si vous avez des questions supplémentaires, n'hésitez pas à me les demander. Il effectue une mise à niveau équitable: désinstallez et installez, ainsi tout nettoyage nécessaire sera effectué par "brasser" lui-même.
obtenir des fûts obsolètes:
brassin de bière obsolète
mise à niveau du fût:
bière brassée 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}"
Cela m'a vraiment énervé. J'ai donc 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
J'utilise
brew cask install --force `brew cask list`
Sur la base de ce que j'ai lu, j'ai créé un script qui créera un fichier qui répertorie les fichiers à mettre à jour, y compris les applications définies comme les plus récentes. Vous pouvez ensuite modifier le fichier en fonction de vos besoins et installer les mises à jour à l'aide de mon script olinst.
Pour plus d'informations, visitez mon github.
Vérifiez les fûts obsolètes:
brassin de bière obsolète
Mettre à jour tous les fûts obsolètes:
mise à niveau du fût de bière
Si vous voulez mettre à niveau un cask spécifique, ajoutez simplement le nom du cask après la mise à niveau (ex: 4k-video-downloader):
mise à niveau de bière brassée 4k-vidéo-téléchargeur