Bash检查是否安装了特定版本的brew配方

时间:2018-01-06 15:37:21

标签: bash sh homebrew

我在bash中创建一个脚本来配置一些安装了一些brew配方的MacOS机器。我首先要检查是否已安装该公式的特定版本。如果未安装,脚本将安装它。

问题是我无法弄清楚如何检查这个。例如。 brew ls --versions openssl返回所有已安装的版本。但我想检查一个特定的版本,有点类似于宝石gem list -i cocoapods -v 1.3.1。原因是某些项目需要安装特定版本(如openssl)。

有可能这样做吗?请注意,有一些brew公式需要检查,所以我希望尽可能保持轻量级:)

我有这样的想法(但正确检查当然):

if ! NOT_INSTALLED; then #check to see if ruby -v 2.2.2 has been installed
    brew install ruby -v 2.2.2
else
    echo "Skipping install ruby..."
fi

提前致谢!

1 个答案:

答案 0 :(得分:2)

没有内置的Homebrew命令来检查是否安装了某个版本,但是使用某些shell脚本非常简单。例如,

brew list --versions | grep qt | cut -d " " -f 2

列出了我在机器上安装的所有Qt版本,并打印:

5.10.0_1
5.7.1

您可以进一步优化它以查看是否安装了特定版本:

brew list --versions | grep "qt.* 5.7"

将打印任何版本的Qt 5.7。

将搜索特定公式的特定版本的简单shell函数可能如下所示:

formula_installed() {
    [ "$(brew list --versions | grep "$1.* $2")" ]
    return $?
}

用法:

$ formula_installed qt 5.7
$ echo $?
1
$ formula_installed qt 8
$ echo $?
0

有关.*来电中grep正则表达式的说明。最初,在homebrew/versions点击中维护了公式的多个版本。这已被弃用,有利于在[{1}}中保留旧版本,但在其名称后附加homebrew/core。 (例如,您可以通过执行@<version>安装Qt 5.5版。)这样可以更轻松地安装公式的多个(特别是旧版本)版本。