Gibt es eine Möglichkeit, das Brühfass zu aktualisieren?

37

Gibt es eine Möglichkeit, alle brew casks zu aktualisieren ? So etwas wie brew cask upgrade?

demas
quelle

Antworten:

23

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

  • Brüh- / Brühbehälter aktualisieren, bereinigen
  • Lesen Sie die Fässerliste
  • Überprüfen Sie die brew cask infofür die neueste Version
  • installiere neue Version falls verfügbar (und entferne 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 lokal ausführen können

Atais
quelle
Lief wie am Schnürchen. Wäre schön, zuerst eine Liste veralteter Pakete anzufordern. Einfach genug, um das Skript zu optimieren.
Eduncan911
Vielen Dank! Haben Sie versucht, dies direkt in Homebrew Cask zu integrieren? Ich habe es gerade in Fisch umgewandelt und es funktioniert auch für mich. Es zeigte sich mir auch, dass einige alte Versionen noch vorhanden waren, nachdem ich die aktuellen installiert hatte.
Pascal
Sie müssen brew cask uninstall --forcevor der Installation der neuen Version ausgeführt werden, wenn Sie nicht möchten, dass die alte Version dort bleibt.
Pascal
@ Pascal Ja, mir ist aufgefallen, dass auch hier viele alte Versionen gestapelt sind. Bald werde ich Deinstallationsbefehl hinzufügen.
Atais
@Atais funktioniert die Deinstallation bei dir immer noch konsequent? Einige Fässer hinterlassen jetzt einen leeren Ordner mit der Versionsnummer in meinem Skript, was die Versionsprüfung beeinträchtigt.
Pascal
19

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) Aktualisieren veralteter Apps erzwingen, einschließlich der als aktuell markierten:

brew cu --all
Atais
quelle
12

Wie das Zitat in der anderen Antwort besagt, gibt es derzeit keine Möglichkeit, alle aktualisierten Fässer zu aktualisieren.

Der zweite Teil der Antwort ist jedoch falsch: brew upgrade --allFässer können nicht aktualisiert werden.

Die einzige Möglichkeit, ein Upgrade für alle Fässer durchzuführen, besteht darin, eine Liste der installierten Fässer abzurufen und deren Neuinstallation zu erzwingen - einschließlich derjenigen, die sich nicht geändert haben!

Bei Fischen könnte man das so machen:

for app in (brew cask list)
    brew cask install --force $app
end

bearbeiten:

Atais hat ein Skript erstellt, das funktioniert: Bash-Skript zum Aktualisieren von Paketen .
Bitte stimmen Sie seiner Antwort eher zu als dieser.

Pascal
quelle
1
Nun, beachten Sie, dass es tatsächlich alle Ihre Apps neu installieren wird, nicht nur die veralteten aktualisieren :(
Atais
1
Um die Fasslisten zu aktualisieren, führen Sie brew cask updatedie vorherigen Schritte
Danijel-James W
@ Danijel-JamesW Ich habe dein Wechselgeld zurückgesetzt, weil es falsch war. Es mag der Weg sein, es in anderen Muscheln zu tun, aber es ist nicht in Fisch.
Pascal
10

Aus der homebrew caskDokumentation :

Da es sich bei dem Homebrew-Fass-Repository um einen Homebrew-Hahn handelt, ziehen Sie jedes Mal, wenn Sie den regulären Homebrew-Befehl ausgeben, die neuesten Fässer herunter brew update. Derzeit kann homebrew-cask nicht immer erkennen, ob eine Anwendung aktualisiert wurde. Sie können ein Update über den Befehl erzwingen brew cask install --force. Wir arbeiten daran, dies zu verbessern.

Das Folgende sollte ausreichen, um sowohl Brührezepturen als auch Fässer aufzurüsten.

brew upgrade --all 
jherran
quelle
4
Das stimmt nicht mehr. brew upgrade --allist gleichwertig mit brew upgradejetzt. Fässer werden durch diesen Befehl nicht aktualisiert.
Proski
6

Hier ist, was ich in meinem .bash_profile habe, damit ich ein vollständiges Upgrade von Homebrew durchführen kann. Ich habe ein paar Elemente "angeheftet", um zu verhindern, dass gigantische Downloads bei jedem Update wiederholt abgerufen werden, da ihre Versionen immer "aktuell" sind oder nicht aktualisiert werden sollten.

boop() {
  brew update && brew upgrade && brew cleanup \
    && cask-upgrade && cask-retire && brew cask cleanup \
      && brew doctor && brew cask doctor
}

__is_pinned() {
  local pinned=";pixate-studio;sketchup;skype;"
  [[ *";${1};"* != "${pinned}" ]] && return 0 || return 1
}

cask-upgrade() {
  while read -r; do
    reply=(${REPLY})
    name="${reply[0]}"
    vers="${reply[1]}"
    if ! __is_pinned "${name}"; then
      if [[ "${vers}" == "latest" ]]; then
        brew cask install "${name}" --force
      else
        brew cask install "${name}" 2> >(grep -v "re-install")
      fi
    fi
  done < <(brew cask list --versions)
}

cask-retire() {
  room="/opt/homebrew-cask/Caskroom"
  while read -r; do
    reply=(${REPLY})
    name="${reply[0]}"
    vers="${reply[1]}"
    if ! __is_pinned "${name}"; then
      for inst in $(ls "${room}/${name}"); do
        if [[ "${inst}" != "${vers}" ]]; then
          echo "Removing ${name} version ${inst}"
          rm -r "${room}/${name}/${inst}"
        fi
      done
    fi
  done < <(brew cask list --versions)
}
MithrilTuxedo
quelle
2

So installieren Sie Brew Cask-Apps in zsh neu:

brew cask update;

for app in $(brew cask list); do
    brew cask uninstall --force ${app}
    brew cask install --force ${app}    
done
sqren
quelle
Dies ist nicht sehr gut für Benutzer, die möglicherweise viele brew caskInstallationen haben, für die Benutzereingaben erforderlich sind (z . B. - quartz) . Außerdem muss nicht jede Anwendung deinstalliert werden, bevor sie erneut installiert wird. Idealerweise sollten Sie auch ein Update wie brew cask updatezuerst ausführen .
Danijel-James W
@ Danijel-JamesW Leider ist es so, wenn du nicht willst, dass die alte Version bleibt.
Pascal
1

Ich empfehle die Antwort von @ eduncan911 in der Gegenfrage zum Stack Overflow .

Zusamenfassend:

  • $ brew-cask.shlistet nur eine Ausgabe ähnlich der von Homebrew auf brew update. In der obigen Liste sind alle installierten Pakete aufgeführt. Ein grünes Symbol zeigt an, dass Aktualisierungen ausstehen.
  • $ brew-cask.shupgrade erzwingt das Upgrade dieser Pakete.

Installieren Sie von seinem Repo mit:

$ 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
lucianf
quelle
1

Ich habe ein solches Skript 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 ist ein faires Upgrade: Deinstallieren und installieren, sodass alle erforderlichen Bereinigungen von "brew" selbst durchgeführt werden.

Pavel Goltsev
quelle
1

Dies wäre wahrscheinlich als Kommentar angemessener, aber ich habe nicht genug Ruf, um einen zu hinterlassen, also ...

Ab diesem Zeitpunkt homebrew-caskist ein eigenes Upgrade-System vorhanden, sodass keine Skripte und Tools von Drittanbietern mehr erforderlich sind.

So listen Sie veraltete Fässer auf: brew cask outdated

So aktualisieren Sie alle veralteten Fässer: brew cask upgrade

DarrenPMeyer
quelle
0
for app in $(brew cask list); do
    cver="$(brew cask info "${app}" | head -n 1 | cut -d " " -f 2)"
    ivers=$(ls -1 "/opt/homebrew-cask/Caskroom/${app}/.metadata/" | tr '\n' ' ' | sed -e 's/ $//')
    aivers=(${ivers})
    nvers=$(echo ${#aivers[@]})
    echo "[*] Found ${app} in cask list. Latest available version is ${cver}. You have installed version(s): ${overs}"
    if [[ ${nvers} -eq 1 ]]; then
        echo "${ivers}" | grep -q "^${cver}$" && { echo "[*] Latest version already installed :) Skipping changes ..."
        continue; }
    fi
    echo "[+] Fixing from ${ivers} to ${cver} ..."
    brew cask uninstall "${app}" --force
    brew cask install "${app}"
done
Name
quelle
Dies ist unlesbar - muss auch erklärt werden, was es tut
user151019