web-dev-qa-db-fra.com

Mettre à niveau tous les fûts installés via Homebrew Cask

J'utilise Homebrew Cask pour installer des applications sur OS X. Comment puis-je mettre à niveau tous les fûts installés?

127
enrico.bacis

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 .

229
scribblemaniac

homebrew-cask-upgrade

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
42
Atais

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
26
enrico.bacis

Script Bash pour mettre à jour les paquets

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

  • mettre à jour l'infusion/le fût d'infusion, le nettoyage
  • lire la liste des fûts
  • vérifier le brew cask info pour la dernière version
  • installe la nouvelle version si disponible (et supprime toutes les anciennes versions!)

source: 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

19
Atais

À 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
11
Bojoer

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 
} 
6
deinspanjer

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.

6
enrico.bacis

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.

4
Pranab Agarwal

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.
  • la liste ci-dessus montre tous les packages installés, avec un 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

installez-le simplement (aka "j'en ai besoin maintenant!")

Il est vérifié dans mon .dotfiles repo ; alors, vous pouvez l’installer rapidement dans votre ~/binwith:

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

4
eduncan911

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

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

sortie info tonnea

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.

2
Kevin N
brew cask outdated | xargs brew cask reinstall --force
2
Omar Albeik

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.

2
Pavel Goltsev

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}"
2
Wanming Zhang

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

1
Derrek

J'utilise

brew cask install --force `brew cask list`
1
goksel

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.

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

1
Paul Cav

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

0
Amir Marmul