Eu pessoalmente não uso o Homebrew, portanto, se existe uma maneira de usar o brew
próprio número de versão mais recente disponível on-line, eu não sei.
Observe que desde 27 de junho de 2012 e a versão 0.9.1 do Homebrew, a numeração de versões mantém um padrão típico definido major.minor.maintenance
, usando apenas números separados por um ponto. Portanto, é relativamente fácil testar se os valores retornados das substituições de comando usadas para atribuí-los às variáveis da versão instalada e da versão mais recente seguem esse padrão.
Depois de testadas, as seqüências de versão são convertidas em números, para que uma comparação binária possa determinar se a versão instalada é menor que a versão mais recente, quando é possível executar a ação apropriada.
O bash
script a seguir é um exemplo de como alguém pode codificá- lo:
#!/bin/bash
# Get installed version number and latest release version number.
localHomebrewVersion="$(brew --version | awk '/Homebrew [0-9]/{print $2}')"
latestHomebrewRelease="$(curl -sL https://api.github.com/repos/Homebrew/brew/releases/latest | ruby -rjson -e 'puts JSON.parse($<.read)["name"]')"
# Test that both variables hold the expected pattern.
if [[ $localHomebrewVersion =~ [0-9]\.[0-9]{1,2}\.[0-9]{1,2} ]] && [[ $latestHomebrewRelease =~ [0-9]\.[0-9]{1,2}\.[0-9]{1,2} ]]; then
# Function used to convert string version numbers to numeric values for testing.
function version { echo "$@" | awk -F. '{ printf("%d%03d%03d%03d", $1,$2,$3,$4); }'; }
# Test to see if the installed version number is less than the latest release version.
if [[ $(version $localHomebrewVersion) -lt $(version $latestHomebrewRelease) ]]; then
brew update
else
echo "Homebrew is already up-to-date."
fi
else
# One or both of the command substitutions '$(...)' returned unexpected output for the version variables.
echo "At least one of the version variables contains an unexpected value."
fi
Nota: Incorporei o comando sugerido no comentário de Synoli para atribuir à latestHomebrewRelease
variável , pois certamente parece ser um método mais estável para obter as informações da versão mais recente.
Atualização: Adicionado um teste para ver as variáveis de versão conterem o padrão esperado antes de testar se a versão instalada é menor que a versão mais recente.