melhorando o código fornecido pelo deinspanjer, tentei imitar um comando noop, semelhante ao do chocolatey ( atualização do choco --noop / choco desatualizado ).
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
Como se pode ver, estou usando uma abordagem modular, pois meu caso de uso difere um pouco. Não quero me sentar na frente do meu computador e digite sim / não para todos os aplicativos que instalei. Embora não haja uma maneira real de atualizar os barris (apenas a reinstalação da versão mais recente), primeiro faço a atualização para ter as informações de que existem realmente atualizações disponíveis .
Em seguida, percorro todos os barris para exibir suas informações. Como eu fiz a atualização antes, agora é fornecida uma informação que a versão mais recente de algum barril não está instalada.
Dentro do meu método de atualização, analiso o comando info para essa linha específica:
lookup | grep -B 3 'Not installed' | sed -e '/^http/d;/^Not/d;/:/!d' | cut -d ":" -f1
Que se traduz em: "Forneça as 3 linhas acima das informações fornecidas sempre que você ler a linha" não instalada ". Exclua qualquer linha que tenha um link, exclua também uma linha que tenha um ':'."
Dada a estrutura do comando brew cask info, terminamos com uma linha (sem informações da versão, sem URL do aplicativo), que reflete o nome real do barril no qual ele também foi instalado.
saída de informações do barril de fermentação
Na minha versão, essas informações agora são impressas para que você possa ver facilmente quais barris estão desatualizados e que podem ser atualizados.
Neste ponto, eu faço um caso de troca, porque talvez agora não haja tempo suficiente para atualizar as coisas. Depende do seu caso de uso. Para mim, às vezes eu só quero ver o que há de novo (aguardando uma nova versão, uma correção de bug), mas não tenho tempo para atualizar as coisas, porque agora eu não quero fechar meu navegador etc.
Portanto, se alguém optar por "sim", a lista de nomes limpos de barris será fornecida à função de atualização, onde para cada barril que foi determinado como desatualizado, a reinstalação é emitida.
Mais uma vez obrigado a deinspanjer, enquanto tentava resolver esse problema por mim mesmo, sempre esqueci de publicar a atualização com antecedência, para que não houvesse uma linha "não instalada" para analisar (a base de toda a minha abordagem).
Eu espero que isso tenha sido útil.