Respostas:
inspirado pela resposta de 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
O que faz
brew cask info
versão mais recentefonte: https://gist.github.com/atais/9c72e469b1cbec35c7c430ce03de2a6b
um forro para impaciente:
curl -s https://gist.githubusercontent.com/atais/9c72e469b1cbec35c7c430ce03de2a6b/raw/36808a0544628398f26b48f7a3c7b309872ca2c6/cask_upgrade.sh | bash /dev/stdin
salvar como /usr/local/bin/cask-upgrade
, para que você possa executá-lo localmente mais cask-upgrade
tarde
brew cask uninstall --force
antes de instalar a nova versão, se não quiser que a versão antiga permaneça lá.
Penso que esta é de longe a melhor solução para atualizar os barris.
fonte: https://github.com/buo/homebrew-cask-upgrade
Instalação e uso
brew tap buo/cask-upgrade
brew update
brew cu
(Opcional) Force a atualização de aplicativos desatualizados, incluindo os marcados como mais recentes:
brew cu --all
Como a citação na outra resposta diz, atualmente não há como atualizar todos os barris atualizados.
A segunda parte da resposta está errada: brew upgrade --all
não é possível atualizar os barris.
A única maneira de atualizar todos os barris é obter uma lista dos barris instalados e forçá-los a serem reinstalados - incluindo aqueles que não foram alterados!
No peixe , você poderia fazer assim:
for app in (brew cask list)
brew cask install --force $app
end
editar:
Atais criou um script que funciona: Script Bash para atualizar pacotes .
Por favor, vote novamente a resposta dele em vez desta.
brew cask update
, em seguida, siga a resposta anterior para atualizar somente os pacotes que estão desatualizados aqui: apple.stackexchange.com/a/231020/49601
A partir da homebrew cask
documentação :
Como o repositório homebrew-cask é um Homebrew Tap, você seleciona os Casks mais recentes sempre que emitir o comando regular Homebrew
brew update
. Atualmente, o homebrew-cask nem sempre pode detectar se um Aplicativo foi atualizado. Você pode forçar uma atualização através do comandobrew cask install --force
. Estamos trabalhando para melhorar isso.
O seguinte deve ser suficiente para atualizar as fórmulas de fermentação e os barris.
brew upgrade --all
brew upgrade --all
é equivalente a brew upgrade
agora. Os barris não são atualizados por esse comando.
Aqui está o que eu tenho no meu .bash_profile que eu corro para fazer uma atualização completa do homebrew. Eu "pin" alguns itens para impedir que downloads gigantescos sejam buscados repetidamente para cada atualização, porque suas versões são sempre "mais recentes" ou não devem ser atualizadas.
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)
}
Para reinstalar aplicativos de barril de fermentação no zsh:
brew cask update;
for app in $(brew cask list); do
brew cask uninstall --force ${app}
brew cask install --force ${app}
done
brew cask
instalações que exigem entrada do usuário (por exemplo, quartzo) . Além disso, não é necessário desinstalar todos os aplicativos antes de reinstalá-lo. Idealmente, você também deve executar uma atualização como a brew cask update
primeira.
Isso realmente me irritou, então eu criei esse script para atualizar todos os aplicativos Brew e permitir que o usuário escolha quais aplicativos Cask serão atualizados. Você também pode excluir aplicativos da consideração.
https://github.com/derrekyoung/ScriptsAndUtils/blob/master/brew-cask-upgrade.sh
Eu recomendo a resposta de @ eduncan911 na pergunta de contrapartida no Stack Overflow .
Em resumo:
brew-cask.sh
apenas lista uma saída semelhante à do Homebrew brew update
. a lista acima mostra todos os pacotes instalados, com um verde ✔
indicando as atualizações pendentes.brew-cask.sh
upgrade forçará a atualização desses pacotes.Instale a partir de seu repositório com:
$ 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
Em seguida, use-o assim:
$ brew-cask.sh
$ brew-cask.sh upgrade
Eu fiz esse roteiro sozinho. Consulte o github https://github.com/pesh1983/brew_cask_upgrade . Tem uma descrição muito boa, mas se você tiver alguma dúvida adicional, não hesite em me perguntar. Ele faz uma atualização justa: desinstalar e instalar, portanto, qualquer limpeza necessária será realizada pelo próprio 'brew'.
Provavelmente isso seria mais apropriado como comentário, mas não tenho reputação suficiente para deixar um, então ...
No momento da redação deste artigo, ele homebrew-cask
possui seu próprio sistema de atualização e, portanto, os scripts e ferramentas de terceiros não são mais necessários.
Para listar barris desatualizados: brew cask outdated
Para atualizar todos os barris desatualizados: 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