78 votes

Avec Homebrew, comment vérifier si un logiciel/package est installé ?

J'installe un ensemble de logiciels/paquets/formules via homebrew avec une commande du type

brew install <formula1>
...
brew cask install <formula2>
...

Je me demande si c'est une bonne idée de vérifier si les logiciels <formula1> , ..., <formula2> ... sont déjà installés et ne déclenche les commandes ci-dessus que pour ceux qui ne sont pas déjà installés. Si oui, comment ?

2 votes

S'il n'est pas essentiel d'obtenir cette information de Homebrew, et que vous ne vous souciez pas de la façon dont il a été installé, which <programname> est plus rapide que brew list <programname> .

106voto

Josh Points 806

Vous pourriez faire quelque chose comme ça :

brew list <formula1> || brew install <formula1>

Cela provoquera une erreur dans la liste et continuera avec l'installation si le paquet n'est pas installé, sinon cela ne fera que lister les fichiers du paquet. (on pourrait modifier ceci en tant que fonction ou alias dans .bashrc pour le rendre plus facile à taper)

1 votes

Comment cela peut-il être fait dans un fichier de brassage ?

1 votes

@JackMoody Il semble que ce que vous voulez faire est de l'ajouter comme dépendance dans le fichier de brassage en utilisant depends_on

4 votes

Peut le confirmer. brew list python@3.9 &>/dev/null || brew install python@3.9; travaux.

32voto

Josh Correia Points 391

Il faut également noter que vous pouvez taper brew info <formula> qui vous indiquera si une formule est installée ou non. Vous pouvez analyser la réponse à la recherche de "Non installé", puis exécuter le programme d'installation s'il trouve la chaîne.

3 votes

L'inconvénient de brew info <formula> est qu'il se charge très lentement, car il doit aller chercher les statistiques de la formule sur Internet. Si vous utilisez brew list <formula> | grep "No such keg" (ou quelque chose de similaire), le résultat s'affichera beaucoup plus rapidement.

1 votes

brew info a toujours un code de sortie 0. donc c'est inutile. brew list python@3.9 &>/dev/null || brew install python@3.9; fonctionne parce qu'il renvoie 1 quand il n'y a rien de trouvé.

1 votes

@airtonix Ce n'est pas parce qu'il a toujours un code de sortie de 0 qu'il est inutile. Comme je le mentionne dans mon post, cette méthode nécessite que vous analysiez la réponse.

7voto

S'appuyant sur les réponses précédentes, mais emballé dans une fonction prête à l'emploi sans tout le logging homebrew :

brew_install() {
    echo "\nInstalling $1"
    if brew list $1 &>/dev/null; then
        echo "${1} is already installed"
    else
        brew install $1 && echo "$1 is installed"
    fi
}

brew_install "ripgrep"

2voto

oligofren Points 221

Dans la même veine que Hans Fredric, voici un extrait que j'utilise moi-même. L'aspect amusant <(cmd) est une substitution de commande 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"

Ici, apps.local est juste une liste d'applications à installer, une par ligne. L'amélioration par rapport au fait de boucler sur chaque application et d'essayer quelque chose comme brew_install se résume essentiellement à vitesse . Invocation de brew list est lent (jusqu'à une seconde), alors je fais le test une seule fois en listant toutes les applications installées. La différence est très perceptible si vous avez > 5 applications.

Si vous avez besoin de quelque chose avec la même vitesse, mais qui fonctionne aussi bien avec les applications installées à l'aide d'un cask, vous avez besoin de quelque chose de plus élaboré ( comme ceci ).

0 votes

El alias n'est probablement pas nécessaire. De même, si vous n'avez pas besoin $NOT_INSTALLED plus tard, vous pourriez simplement exécuter comm ... | awk ... | while ... .

0 votes

Ce n'est absolument pas nécessaire, mais c'est moins magique quand on le lira dans six mois. Vous savez, Dr. Bob : ExtractMethod pour éviter les commentaires inutiles. Pas besoin d'invoquer le cortex RegExp du cerveau. Et la version pipée rend le débogage beaucoup plus difficile lorsque vous voulez changer quelque chose - j'y suis allé en premier :-)

0 votes

Je suis d'accord. J'aurais probablement inclus le grepping dans la partie awk, mais c'est certainement une question de goût personnel :-)

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X