【问题标题】:Detect if homebrew package is installed检测是否安装了自制软件包
【发布时间】:2014-01-15 03:24:00
【问题描述】:

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

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

【问题讨论】:

  • brew --cellar "$formula" >/dev/null 2>&1 --cellar formula: Display the location in the cellar where formula would be installed, without any sort of versioned directory as the last path. brew man page;很想给它作为答案
  • if [ ! -x "$(command -v PKG_EXEC)" ]; then # package not installed fi

标签: bash shell homebrew


【解决方案1】:

怎么样?

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

【讨论】:

  • 您的解决方案不适用于某些版本化的公式,例如 python@3,它安装(并列出)为 python3
【解决方案2】:

你可以使用

brew ls --versions myformula

输出相应公式的已安装版本。如果没有安装公式,则输出为空。

当使用最新版本的自制软件时,您可以通过 brew update 获得,您可以运行它(感谢 Slaven):

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

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

【讨论】:

  • 由于github.com/Homebrew/brew/commit/… 检查退出代码就足够了:如果没有安装公式,则返回 false (1)。
  • 所以如果我运行if macchanger --help > /dev/null; then,会检查macchanger 是否已安装?
  • @KeeganKuhn 如果成功,则macchanger 位于当前shell 的$PATH 中。如果失败,则它在 PATH 中不可用或未安装。
  • @Keegan Kuhn - 如果你真的只是想检查一个应用程序是否在 PATH 上(不运行它),你可以使用which -s-s 选项(静默)记录为“-s 无输出,如果找到任何可执行文件则返回 0,如果没有找到则返回 1。”正确使用类似于which macchanger || echo "macchanger not on PATH"
【解决方案3】:
# 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

【讨论】:

    【解决方案4】:

    最简单的两条线: 第一步,确保已安装

    $ realpath . || brew install coreutils
    

    这将打印出当前目录的真实路径,如果没有,则会安装它。 即使没有找到真实路径也不会失败。

    第二步,在你的实际代码中调用它:

    $ realpath ${someDir}
    

    【讨论】:

    • 这是针对特定工具的简单解决方案。这不是一个通用的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 2019-07-29
    相关资源
    最近更新 更多