检测是否安装了自制软件包

ilt*_*mpo 92 bash shell homebrew

我即将编写一个shell脚本来检测系统中是否安装了几个自制软件包.有没有办法使用brew命令来实现这一目标?

我尝试使用退出代码brew install <formula> --dry-run.但如果它丢失了,这会构建包.

Hol*_*ust 143

您可以使用

brew ls --versions myformula
Run Code Online (Sandbox Code Playgroud)

输出相应公式的已安装版本.如果未安装公式,则输出将为空.

使用最新版本的自制软件时brew update,你可以运行它(感谢Slaven):

if brew ls --versions myformula > /dev/null; then
  # The package is installed
else
  # The package is not installed
fi
Run Code Online (Sandbox Code Playgroud)

也就是说,检查工具的存在可能是一个好主意,而不仅仅是检查相应的自制软件包(例如,通过搜索中的可执行文件$PATH).人们倾向于在实践中以相当多的方式安装工具,而自制软件只是其中之一.

  • 从https://github.com/Homebrew/brew/commit/db478fb7b2d8047403b71208af73b400bcf7a3e2开始,检查退出代码就足够了:如果未安装公式,则返回false(1). (6认同)
  • 同样适用于cask` brew cask ls --versions <cask>`thx (2认同)
  • @Keegan Kuhn-如果您真的只想检查应用程序是否在PATH上(不运行它),则可以使用which -s。-s选项(静默)记录为“ -s无输出,如果找到任何可执行文件,则仅返回0;否则,则返回1”。正确的用法就像`macchanger || 回声“ macchanger不在路径上” (2认同)

tim*_*our 10

# 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
Run Code Online (Sandbox Code Playgroud)


Joh*_*iss 7

关于什么?

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
Run Code Online (Sandbox Code Playgroud)