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?

117
demandé sur enrico.bacis 2015-08-12 17:51:29

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 .

192
répondu scribblemaniac 2017-12-18 11:17:07

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
40
répondu Atais 2016-09-21 09:20:22

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
26
répondu enrico.bacis 2016-07-08 08:09:16

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

19
répondu Atais 2017-04-13 12:45:06

À 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

12
répondu Bojoer 2017-12-21 06:59:26

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 
} 
6
répondu deinspanjer 2015-08-26 18:54:53

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 Homebrew brew 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.

4
répondu eduncan911 2016-04-26 12:31:07

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.

4
répondu Pranab Agarwal 2017-08-01 00:43:25

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.

4
répondu enrico.bacis 2017-12-03 09:10:45

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).

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

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é.

Brew fût info de sortie

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.

2
répondu Kevin N 2016-03-15 06:28:25

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.

2
répondu Pavel Goltsev 2017-01-24 10:27:27
brew cask outdated | xargs brew cask reinstall --force
2
répondu omaralbeik 2017-07-30 18:58:17

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}"
2
répondu Wanming Zhang 2017-11-16 05:48:19

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.

Https://github.com/pacav69/caskroom-offline-install

1
répondu Paul Cav 2016-07-01 10:44:36

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

1
répondu Derrek 2016-08-05 21:40:12

J'utilise

brew cask install --force `brew cask list`
1
répondu goksel 2016-10-17 16:30:53