Aktualisieren Sie alle über Homebrew Cask installierten Fässer


157

Ich verwende Homebrew Cask , um Anwendungen unter OS X zu installieren. Wie aktualisiere ich alle installierten Fässer?


3
Angehängte Frage: "Wie würde ich nur einen der Fässer aufrüsten?"
Matthew Harwood

Das würde mich sehr interessieren ... es scheint keine Möglichkeit zu geben, ein Fass aufzurüsten, aber es macht keinen Sinn. Ich habe Brackets 1.3 installiert und Plugins in Brackets installiert. Jetzt, da 1.4 heraus ist, möchte ich ein Upgrade durchführen, aber die Plug-Ins behalten. Ich sehe nicht ein, wie ich das machen soll.
Jean-François Beauchef

Insbesondere in Bezug auf Klammern werden Benutzererweiterungen unter OS X für Klammern gespeichert ~/Library/Application Support/Brackets/extensions/user, die über Upgrades hinweg bestehen bleiben sollten. System-Plugins werden zwar im App-Bundle gespeichert Brackets.app/extensions/default, diese gehen jedoch verloren, wenn Sie das App-Bundle ersetzen. Am einfachsten ist es jedoch, die Plugins vom alten auf das neue Bundle zu kopieren.
Caleb Xu


Der einzige Weg, wie ich ein einzelnes Fass aufrüsten kann, ist bis brew cask uninstall my-cool-caskdahin brew cask install my-cool-cask.
Aaron Gray

Antworten:


291

Es gibt jetzt endlich einen offiziellen Upgrade-Mechanismus für Homebrew Cask ( Implementierung siehe Ausgabe 3396 )! Um es zu verwenden, führen Sie einfach diesen Befehl aus:

brew cask upgrade

Dies aktualisiert jedoch keine Casks ohne Versionsinformationen ( version :latest) oder Anwendungen mit integriertem Upgrade-Mechanismus ( auto_updates true). Führen Sie den Befehl upgrade mit dem folgenden --greedyFlag aus , um diese Fässer neu zu installieren (und sie folglich zu aktualisieren, wenn Upgrades verfügbar sind) :

brew cask upgrade --greedy


3
Vielen Dank an @mipadi, dass Sie meine Antwort unten in diese Antwort kopiert haben, ohne sie zu zitieren oder zu bewerten. Jedenfalls scheint dieser jetzt vollständig zu sein.
enrico.bacis

3
@ enrico.bacis: Chill. Ich habe Ihre Antwort nicht gesehen, und dies ist eine offensichtliche Ergänzung. (Und für die Aufzeichnung sollten Sie diese Antwort bearbeitet haben, anstatt eine neue hinzuzufügen.)
Mipadi

2
Das hat mich wirklich geärgert, deshalb habe ich dieses Skript erstellt, um alle Brew-Apps zu aktualisieren und dem Benutzer die Auswahl der zu aktualisierenden Cask-Apps zu ermöglichen. Sie können Apps auch von der Prüfung ausschließen. github.com/derrekyoung/ScriptsAndUtils/blob/master/…
Derrek

14
Sie können jetzt brew cask outdated | xargs brew cask reinstallnur veraltete Fässer neu installieren.
Phdoerfler

2
Es ist wichtig zu beachten, dass brew cask outdatednur Namen von Apps ausgedruckt werden, für die "Auto-Update" nicht aktiviert ist. Um ALLE veralteten Apps zu aktualisieren, verwenden Siebrew cask outdated --greedy --verbose | grep -v '(latest)' | awk '{print $1}' | xargs brew cask reinstall
jmk

47

Homebrew-Fass-Upgrade

Ich denke, dies ist bei weitem die beste Lösung, um die Fässer aufzurüsten.
Quelle: https://github.com/buo/homebrew-cask-upgrade

Installation & Nutzung

brew tap buo/cask-upgrade
brew update
brew cu

(Optional) Erzwingen Sie das Upgrade veralteter Apps, einschließlich der als aktuell gekennzeichneten:

brew cu --all

@ XingangHuang ja
ovnia

26

Es ist möglich, die installierten Fässer aufzulisten mit:

brew cask list

Und erzwingen Sie die Neuinstallation eines Fasses mit:

brew cask install --force CASK_NAME

Wenn wir also die Ausgabe des ersten Befehls in den zweiten Befehl leiten, aktualisieren wir alle Fässer:

brew cask list | xargs brew cask install --force

1
Das aktualisiert die Fässer nicht wirklich. Es erzwingt eine Neuinstallation, selbst für Fässer, für die kein Update verfügbar ist. Abhängig davon, wie viele Fässer Sie installiert haben und wie lange sie installiert wurden, kann dies unnötige Downloads auslösen, viel Zeit in Anspruch nehmen und zur Eingabe des Sudo-Zugriffs auffordern.
Burhan Ali

20

Bash-Skript zum Aktualisieren von Paketen

inspiriert von Pascal Antwort

#!/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

Was es macht

  • Gebräu / Brühfass aktualisieren, aufräumen
  • Lesen Sie die Fässerliste
  • Überprüfen Sie die brew cask infofür die neueste Version
  • Installieren Sie eine neue Version, falls verfügbar (und entfernen Sie alle alten Versionen!)

Quelle: https://gist.github.com/atais/9c72e469b1cbec35c7c430ce03de2a6b

Ein Liner für Ungeduldige:

curl -s https://gist.githubusercontent.com/atais/9c72e469b1cbec35c7c430ce03de2a6b/raw/36808a0544628398f26b48f7a3c7b309872ca2c6/cask_upgrade.sh | bash /dev/stdin

Speichern unter /usr/local/bin/cask-upgrade , damit Sie es cask-upgradespäter als lokal ausführen können


Kannst du nicht einfach tun brew cask info $cask | grep "Not installed"?
Det

@Det hah ... nun, ich habe es nicht gesehen, aber jetzt. Nun, ich könnte es in der nächsten Version tun
;-)

1
$ brew cask info $cask | grep "Not installed"gibt den FehlerError: This command requires a Cask token
eduncan911

1
@ eduncan911 Sie verwenden es mit dem Skript, nach demfor cask in ${casks[@]}; do
Det

smacks headoffensichtlich! Ich kann nicht glauben, dass ich das nicht verstanden habe.
eduncan911

11

Ab Dezember 2017 verwenden: Braufass Upgrade

[VERRINGERT seit Dezember 2017, als Homebrew den Upgrade-Befehl für das Fass einführte] Ich verwende einfach Folgendes:

brew cask outdated | xargs brew cask reinstall


Grundsätzlich, was ich auch mache, außer dass ich awk '{print $1}'zwischen den beiden gepfeift habe .
Paul Nelson Baker

6

Hier ist die Funktion, die ich geschrieben habe, um damit umzugehen. Beachten Sie, dass ich persönlich nicht wollte, dass alles blind neu installiert wird, da einige der von mir verwendeten Fässer eine Weile brauchen, um installiert zu werden, oder zusätzliche Eingabeaufforderungen erfordern.

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 
} 

Ich verwende OS X El Capitan, aber als ich diese Funktion getestet habe, hat die Shell Fehler ausgelöst, da das - in Funktionsnamen kein zulässiges Zeichen ist . Wichtiger Unterschied - obwohl es in Bash funktioniert, ist es für sh nicht zulässig. Wenn Sie also #! / Bin / sh verwenden, um die Kompatibilität zwischen Systemen mit mehreren Shells zu gewährleisten, funktioniert dies nicht. Das Ändern der Bindestriche in Unterstriche funktioniert jedoch einwandfrei.
Bryan 'BJ' Hoffpauir Jr.

5

Basierend auf der Antwort von @Atais habe ich seine Logik zu etwas Schönerem erweitert. Ich wollte eine Möglichkeit, die zu aktualisierenden Pakete zuerst zu überprüfen, bevor das Upgrade tatsächlich erzwungen wird.

  • $ brew-cask.shlistet nur eine Ausgabe ähnlich der von Homebrew auf brew update.
  • Die obige Liste zeigt alle installierten Pakete, wobei ein Grün alle ausstehenden Updates anzeigt.
  • $ brew-cask.sh upgrade erzwingt das Upgrade dieser Pakete.

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

installiere es einfach (auch bekannt als "Ich brauche es jetzt!")

Es ist in mein .dotfilesRepo eingecheckt ; So können Sie es schnell in Ihrem installieren ~/binmit:

$ 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

Dann benutze es so:

$ brew-cask.sh
$ brew-cask.sh upgrade

Wenn Sie nicht ~/binin Ihrem Pfad haben, stellen Sie ~/bin/die obigen Anweisungen voran.


5

brew cask upgrade

Der upgradeBefehl wurde kürzlich in Homebrew Cask eingeführt und sollte alle anderen manuellen Methoden, die in den anderen Antworten beschrieben sind, ablehnen.


Obwohl dieser Befehl vorhanden ist, werden einige Pakete nicht aktualisiert.
Acumenus

4

Ich denke mit

brew cask reinstall `brew cask outdated`

wird den Trick machen. Dies hilft auch dabei, die vorherigen Versionen der Anwendung zu entfernen und die neuere Version zu installieren.


2
Dies sollte jetzt seinbrew cask reinstall `brew cask outdated`
Gbonetti

1
Danke für das Update @gbonetti. Du hast Recht. Mit der neuen Option "veraltet" wird die Aufgabe auch einfacher und schneller :-).
Pranab Agarwal

2

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.


2

Ich habe ein solches Drehbuch selbst gemacht. Bitte schauen Sie sich den Github https://github.com/pesh1983/brew_cask_upgrade an . Es hat eine ziemlich gute Beschreibung, aber wenn Sie weitere Fragen haben, können Sie mich gerne fragen. Es wird ein faires Upgrade durchgeführt: Deinstallieren und installieren, sodass alle erforderlichen Bereinigungen von "Brew" selbst durchgeführt werden.



2

veraltete Fässer bekommen:

Braufass veraltet

Upgrade-Fass:

Brühfass veraltetes Fass wieder einbauen

Demo-Skript:

$ 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}"

1

Basierend auf dem, was ich gelesen habe, habe ich ein Skript erstellt, das eine Datei erstellt, in der die zu aktualisierenden Dateien aufgelistet sind, einschließlich Apps, die als aktuell definiert sind. Sie können die Datei dann an Ihre Anforderungen anpassen und Updates mit meinem olinst-Skript installieren.

Für weitere Informationen besuchen Sie meinen Github.

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



1

ich benutze

brew cask install --force `brew cask list`

1

Überprüfen Sie veraltete Fässer:

Braufass veraltet

Aktualisieren aller veralteten Fässer:

Braufass Upgrade

Wenn Sie ein bestimmtes Fass aktualisieren möchten, fügen Sie nach dem Upgrade einfach den Fassnamen hinzu (Beispiel: 4k-Video-Downloader):

Braufass Upgrade 4k-Video-Downloader


2
Hallo, willkommen bei StackOverflow. Da es sich um eine alte Frage mit mehreren Antworten handelt, von denen eine äußerst beliebt und akzeptiert ist, bearbeiten Sie bitte Ihre Antwort, um detaillierter zu beschreiben, wie sie die Frage beantwortet und warum sie den vorhandenen Antworten vorzuziehen ist. Vielen Dank.
MandyShaw
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.