68 votos

Con Homebrew, ¿cómo se puede verificar si un software/paquete está instalado?

Estoy instalando un conjunto de softwares/paquetes/fórmulas a través de homebrew con comandos como

brew install 
...
brew cask install 
...

Me pregunto si es una buena idea verificar si los softwares , ..., , ... ya están instalados y solo ejecutar los comandos anteriores para aquellos que NO estén instalados. En tal caso, ¿cómo?

1 votos

Si no es crítico obtener esta información de Homebrew, y no te importa cómo se instaló, which es más rápido que brew list .

91voto

Josh Puntos 126

Puedes hacer algo así:

brew list  || brew install 

Esto dará error en la lista y continuará con la instalación si no está instalado; de lo contrario, simplemente enumerará los archivos del paquete. (uno podría modificar esto aún más como una función o alias en .bashrc para que sea más fácil de escribir)

1 votos

¿Cómo se puede hacer esto en un Brewfile?

1 votos

@JackMoody Parece que lo que quieres hacer es agregarlo como una dependencia en el archivo brew usando depends_on

3 votos

Puedo confirmar. brew list python@3.9 &>/dev/null || brew install python@3.9; funciona.

27voto

Josh Correia Puntos 261

También cabe destacar que puedes escribir brew info lo cual te dirá si una fórmula está instalada. Puedes analizar la respuesta para "No instalado" y luego ejecutar el instalador si encuentra la cadena.

2 votos

El inconveniente de brew info es que carga muy lentamente, ya que tiene que buscar las estadísticas de la fórmula en Internet. Si utilizas brew list | grep "No such keg" (o algo similar), el resultado se mostrará mucho más rápido.

0 votos

brew info siempre tiene un código de salida 0, por lo que es inútil. brew list python@3.9 &>/dev/null || brew install python@3.9; funciona porque devuelve 1 cuando no se encuentra nada.

0 votos

@airtonix Solo porque siempre tiene un código de salida de 0 no significa que sea inútil. Como menciono en mi publicación, este método requiere que analices la respuesta.

5voto

Basado en las respuestas anteriores, pero empaquetado en una función lista para usar sin todo el registro casero:

brew_install() {
    echo "\nInstalando $1"
    if brew list $1 &>/dev/null; then
        echo "${1} ya está instalado"
    else
        brew install $1 && echo "$1 está instalado"
    fi
}

brew_install "ripgrep"

2voto

ashish jaiman Puntos 339

En una vena similar a Hans Fredric, aquí hay un fragmento que realmente uso yo mismo. El aspecto gracioso <(cmd) es la sustitución de comandos de Bash.

alias strip-empty="egrep -v '^\s*$'"
NOT_INSTALLED=$(comm -23 <(sort < apps.local) <( brew list --versions | awk '{print $1}' ) | strip-empty)
while read FORMULA; do
    brew install "$FORMULA"
done <<< "$NOT_INSTALLED"

Aquí, apps.local es solo una lista de aplicaciones para instalar, una por línea. La mejora sobre simplemente hacer un bucle sobre cada aplicación e intentar algo como brew_install básicamente se reduce a la velocidad. Invocar brew list es lento (como hasta un segundo), así que solo hago la prueba una vez enumerando todas las aplicaciones instaladas. La diferencia es muy notoria si tienes > 5 aplicaciones.

Si necesitas algo con la misma velocidad, pero que funcione igual de bien con aplicaciones instaladas usando un cask, necesitas algo más elaborado (como esto).

0 votos

El alias probablemente no sea necesario. Además, si más adelante no necesitas $NOT_INSTALLED, podrías simplemente ejecutar comm ... | awk ... | while ....

0 votos

No es absolutamente necesario, pero hace que sea menos mágico al leerlo en medio año. Sabes, Dr. Bob: ExtractMethod para evitar comentarios innecesarios. No es necesario invocar el córtex RegExp del cerebro. Y la versión con tuberías dificulta mucho la depuración cuando quieres cambiar algo - ¡fui allí primero :-)

0 votos

De acuerdo. Probablemente incluiría el grepping en la parte de awk, pero eso seguro que es una cuestión de gusto personal :-)

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X