我正在 bash 中制作一个脚本来配置一些安装了一些 Brew 公式的 MacOS 机器。我首先想检查是否已安装该公式的特定版本。如果未安装,脚本将安装它。
问题是我不知道如何检查这一点。例如brew ls --versions openssl返回所有已安装的版本。但我想检查一个特定的版本,有点类似于 gems gem list -i cocoapods -v 1.3.1。原因是某些项目需要安装特定版本(例如 openssl)。
有可能这样做吗?请注意,有一些酿造公式需要检查,所以我想尽可能保持轻量级:)
我心里有这样的想法(但当然要进行正确的检查):
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
Run Code Online (Sandbox Code Playgroud)
提前致谢!
没有内置的 Homebrew 命令来检查版本是否已安装,但使用一些 shell 脚本就可以非常简单地完成。例如,
brew list --versions | grep qt | cut -d " " -f 2
Run Code Online (Sandbox Code Playgroud)
列出我的机器上所有已安装的 Qt 版本,并打印:
5.10.0_1
5.7.1
Run Code Online (Sandbox Code Playgroud)
您可以进一步细化它以查看是否安装了特定版本:
brew list --versions | grep "qt.* 5.7"
Run Code Online (Sandbox Code Playgroud)
将打印 Qt 5.7 的任何版本。
一个简单的 shell 函数将搜索特定公式的特定版本,可能如下所示:
formula_installed() {
[ "$(brew list --versions | grep "$1.* $2")" ]
return $?
}
Run Code Online (Sandbox Code Playgroud)
用法:
$ formula_installed qt 5.7
$ echo $?
1
$ formula_installed qt 8
$ echo $?
0
Run Code Online (Sandbox Code Playgroud)
.*关于通话中正则表达式的注释grep。最初,水龙头中维护着一个公式的多个版本homebrew/versions。这已被弃用,有利于保留旧版本homebrew/core但附加@<version>到其名称中。(例如,您可以通过执行以下操作来安装 Qt 版本 5.5 brew install qt@5.5。)这使得安装公式的多个(尤其是较旧的)版本变得更加容易。