Esiste un modo per aggiornare la botte di birra


37

C'è un modo per aggiornare tutti i brew casks? Qualcosa del genere brew cask upgrade?

Risposte:


23

Script di Bash per aggiornare i pacchetti

ispirato dalla risposta di 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

Cosa fa

  • aggiorna brew / brew botte, pulizia
  • leggi l'elenco delle botti
  • controlla la brew cask infoversione più recente
  • installa la nuova versione se disponibile (e rimuove tutte le vecchie versioni!)

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

una fodera per impaziente:

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

salva come /usr/local/bin/cask-upgrade , così puoi eseguirlo localmente come cask-upgradesuccessivamente


Ha funzionato come un fascino. Sarebbe bello richiedere prima un elenco di pacchetti non aggiornati prima. Abbastanza facile da modificare la sceneggiatura per farlo.
eduncan911,

Grazie! Hai provato a integrarlo direttamente in Homebrew Cask? L'ho appena convertito in pesce e funziona anche per me. Mi ha anche rivelato che alcune vecchie versioni erano ancora presenti dopo che avevo installato quelle attuali.
Pascal,

È necessario eseguire brew cask uninstall --forceprima di installare la nuova versione se non si desidera che la versione precedente rimanga lì.
Pascal,

@Pascal sì, ho notato che ho un sacco di vecchie versioni impilate anche qui. Presto aggiungerò il comando di disinstallazione.
Atais,

@Atais la disinstallazione funziona ancora in modo coerente per te? Alcune botte ora lasciano una cartella vuota con il numero di versione con il mio script, il che rovina il controllo della versione.
Pascal,


19

homebrew-botte-upgrade

Penso che questa sia di gran lunga la migliore soluzione per aggiornare le botti.
fonte: https://github.com/buo/homebrew-cask-upgrade

Installazione e utilizzo

brew tap buo/cask-upgrade
brew update
brew cu

(Facoltativo) Forza l'aggiornamento di app obsolete, comprese quelle contrassegnate come più recenti:

brew cu --all

12

Come dice la citazione nell'altra risposta, al momento non è possibile aggiornare tutte le botti aggiornate.

La seconda parte della risposta è sbagliata, però: brew upgrade --allimpossibile aggiornare i botti.

L'unico modo per aggiornare tutte le botti è ottenere un elenco delle botti installate e forzarne la reinstallazione, comprese quelle che non sono state modificate!

Nel pesce , potresti farlo in questo modo:

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

modificare:

Atais ha creato uno script che funziona: script Bash per aggiornare i pacchetti .
Per favore, vota la sua risposta piuttosto che questa.


1
Bene,
tieni

1
Per aggiornare gli elenchi di cask, è necessario eseguire brew cask updatequindi seguire la risposta precedente per aggiornare solo i pacchetti attualmente non aggiornati qui: apple.stackexchange.com/a/231020/49601
Danijel-James W

@ Danijel-JamesW Ho annullato la modifica perché era errata. Potrebbe essere il modo di farlo in altre conchiglie, ma non è nei pesci.
Pascal,

10

Dalla homebrew caskdocumentazione :

Poiché il repository homebrew-cask è un Tap Homebrew, tirerai giù gli ultimi Casks ogni volta che esegui il normale comando Homebrew brew update. Attualmente, homebrew-cask non può sempre rilevare se un'applicazione è stata aggiornata. È possibile forzare un aggiornamento tramite il comando brew cask install --force. Stiamo lavorando per migliorare questo.

Quanto segue dovrebbe essere sufficiente per aggiornare sia le formule che le botti.

brew upgrade --all 

4
Questo non è più vero. brew upgrade --allè equivalente a brew upgradeora. I bachi non vengono aggiornati da quel comando.
proski,

6

Ecco cosa ho nel mio .bash_profile che eseguo per eseguire un passaggio completo di aggiornamento di homebrew. Ho "bloccato" un paio di elementi per evitare che i download giganteschi vengano ripetutamente recuperati per ogni aggiornamento, perché le loro versioni sono sempre "più recenti" o non dovrebbero essere aggiornate.

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

2

Per reinstallare le app cask brew in zsh:

brew cask update;

for app in $(brew cask list); do
    brew cask uninstall --force ${app}
    brew cask install --force ${app}    
done

Questo non è molto buono per gli utenti che potrebbero avere molte brew caskinstallazioni che richiedono input dell'utente (es. - quarzo) . Inoltre, non è necessario disinstallare ogni applicazione prima di reinstallarla. Idealmente, dovresti anche eseguire un aggiornamento come il brew cask updateprimo.
Danijel-James W

@ Danijel-JamesW Sfortunatamente lo è se non vuoi che la vecchia versione rimanga.
Pascal


1

Raccomando la risposta di @ eduncan911 nella domanda di contropartita su StackTranslate.it .

In breve:

  • $ brew-cask.shelenca solo un output simile a quello di Homebrew brew update. l'elenco sopra mostra tutti i pacchetti installati, con un verde che indica eventuali aggiornamenti in sospeso.
  • $ brew-cask.shupgrade forzerà l'aggiornamento di quei pacchetti.

Installa dal suo repository con:

$ 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

Quindi usalo in questo modo:

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

1

Ho realizzato questa sceneggiatura da solo. Consulta il github https://github.com/pesh1983/brew_cask_upgrade . Ha una descrizione abbastanza buona, ma se hai qualche domanda in più, sentiti libero di chiedermelo. Effettua un aggiornamento equo: disinstallare e installare, quindi qualsiasi pulizia necessaria verrà eseguita da 'brew' stesso.


1

Questo sarebbe probabilmente più appropriato come commento, ma non ho abbastanza reputazione per lasciarne uno, quindi ...

Al momento della stesura di questo documento, homebrew-caskha un proprio sistema di aggiornamento, quindi gli script e gli strumenti di terze parti non sono più necessari.

Per elencare le botti obsolete: brew cask outdated

Per aggiornare tutte le botti obsolete: brew cask upgrade


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

Questo è illeggibile - necessita anche di una spiegazione di ciò che fa
user151019
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.