Detect if homebrew package is installed

BashShellHomebrew

Bash Problem Overview


I'm about to write a shell script to detect if several homebrew packages are installed in the system. Is there a way to use a brew command to achieve that?

I tried using the exit code of brew install <formula> --dry-run. But this builds the package if it is missing.

Bash Solutions


Solution 1 - Bash

You can use

brew ls --versions myformula

to output the installed versions of the respective formula. If the formula is not installed, the output will be empty.

When using a recent versions of homebrew, which you can get with brew update, you can just run this (thanks Slaven):

if brew ls --versions myformula > /dev/null; then
  # The package is installed
else
  # The package is not installed
fi

That said, it is probably a good idea to check for the existence of the tool at all and not just checking for the respective homebrew package (e.g. by searching for the executable in the $PATH). People tend to install tools in a rather large amount of ways in practice, with homebrew being just one of them.

Solution 2 - Bash

# install if we haven't installed any version
brew ls --versions $lib || brew install $lib
# install if we haven't installed latest version
brew outdated $lib || brew install $lib

Solution 3 - Bash

What about?

for pkg in macvim ngrep other needed packages; do
    if brew list -1 | grep -q "^${pkg}\$"; then
        echo "Package '$pkg' is installed"
    else
        echo "Package '$pkg' is not installed"
    fi
done

Solution 4 - Bash

Easiest two-liners: Step one, make sure it's installed

$ realpath . || brew install coreutils

This will print out the realpath of current dir, if not, then it will install it. And it will not fail even realpath not found.

Step two, call it in your actual code:

$ realpath ${someDir}

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestioniltempoView Question on Stackoverflow
Solution 1 - BashHolger JustView Answer on Stackoverflow
Solution 2 - BashtimotheecourView Answer on Stackoverflow
Solution 3 - BashJohannes WeissView Answer on Stackoverflow
Solution 4 - BashForeverYangView Answer on Stackoverflow