¿Cómo encontrar programáticamente el número de versión más reciente de Homebrew?

3

¿Cómo encontrar el último número de versión de Homebrew mediante programación?

Puedo encontrar esto en mi computadora local con brew --version y la cadena procesa el resultado para obtener un número de versión. ¿Cuál es una buena manera de obtenerlo para el lanzamiento de Homebrew? Me gustaría verificar mediante programación que Homebrew esté actualizado para muchas computadoras.

    
pregunta qazwsx 27.03.2017 - 19:48

1 respuesta

2

Yo personalmente no uso Homebrew, así que si hay una forma de usar brew para obtener el número de versión más reciente disponible en línea, no lo sé.

Tenga en cuenta que desde el 27 de junio de 2012 y la versión 0.9.1 de Homebrew, la numeración de la versión ha mantenido un patrón típico establecido de major.minor.maintenance , utilizando solo números separados por un período. Por lo tanto, es relativamente fácil probar que los valores devueltos por las sustituciones de comandos utilizadas para asignarlos tanto a la versión instalada como a la última versión de la versión variables siguen este patrón.

Una vez probadas, las cadenas de la versión se convierten a números para que una comparación binaria pueda determinar si la versión instalada es menor que la versión más reciente, en la que se puede tomar la acción correspondiente.

La siguiente secuencia de comandos bash es un ejemplo de cómo se puede codificar :

#!/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: he incorporado el comando sugerido en el comentario de Synoli para asignarlo a la variable latestHomebrewRelease , ya que ciertamente parece ser un método más estable para obtener la última información de la versión de lanzamiento.

Actualización: se agregó una prueba para ver si las variables de la versión contienen el patrón esperado antes de probar si la versión instalada es menor que la versión más reciente.

    
respondido por el user3439894 28.03.2017 - 03:19

Lea otras preguntas en las etiquetas