Risposte:
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
brew cask info
versione più recentefonte: 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-upgrade
successivamente
brew cask uninstall --force
prima di installare la nuova versione se non si desidera che la versione precedente rimanga lì.
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
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 --all
impossibile 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.
brew cask update
quindi seguire la risposta precedente per aggiornare solo i pacchetti attualmente non aggiornati qui: apple.stackexchange.com/a/231020/49601
Dalla homebrew cask
documentazione :
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 comandobrew cask install --force
. Stiamo lavorando per migliorare questo.
Quanto segue dovrebbe essere sufficiente per aggiornare sia le formule che le botti.
brew upgrade --all
brew upgrade --all
è equivalente a brew upgrade
ora. I bachi non vengono aggiornati da quel comando.
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)
}
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
brew cask
installazioni 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 update
primo.
Questo mi ha davvero infastidito, quindi ho creato questo script per aggiornare tutte le app Brew e consentire all'utente di scegliere quali app Cask aggiornare. Puoi escludere anche le app.
https://github.com/derrekyoung/ScriptsAndUtils/blob/master/brew-cask-upgrade.sh
Raccomando la risposta di @ eduncan911 nella domanda di contropartita su StackTranslate.it .
In breve:
brew-cask.sh
elenca 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.sh
upgrade 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
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.
Questo sarebbe probabilmente più appropriato come commento, ma non ho abbastanza reputazione per lasciarne uno, quindi ...
Al momento della stesura di questo documento, homebrew-cask
ha 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
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