在 Homebrew 中获取每个已安装公式的版本?

Get version of each installed formula in Homebrew?

我们正在尝试获取每个包的版本已安装

任何人都可以帮忙提供将像这样打印的 brew 命令吗?

Name            Installed     Latest
ant               1.9.4        1.9.4
maven             3.6.3        3.6.3
mariadb@10.2      10.2.31.     10.2.37
node              v12.1.0      v14.0

这是尝试过的命令:

brew list --formula | xargs -n1 -P8 -I {} sh -c "brew info {}| egrep '[0-9]* stable'|sed -e 's/stable//g' -e 's/HEAD//g' -e 's/(bottled)//g' -e 's/,//g' -e 's/\[keg-only\]//g' -e 's/://g'"|egrep 'node|maven|ant|mariadb'|grep -v "Warning"|column -t

我只得到这个:

ant      1.10.9
maven    3.6.3
node     15.12.0
node@14  14.16.0

需要有关如何从 public 检索最新版本并追加的建议?

使用brew info--json选项获取公式信息为JSON并使用jq从中提取版本。它比使用 grepaws 或其他以直线为导向的工具更安全、更容易。

使用 brew install jq 安装 jq 如果尚未安装:-)

brew list --formulae |
xargs brew info --json |
jq -r '
    ["name", "latest", "installed version(s)"],
    (.[] | [ .name, .versions.stable, (.installed[] | .version) ])
    | @tsv
'

上面的命令列出了所有已安装的公式,将它们的名称传递给 brew info,然后从 brew info --json 产生的 JSON 输出中提取所需的信息。

它生成一个包含 tab-separated 个值的列表,其中包含以下列:namelatestinstalled versions(s)。列的顺序被交换,因为可以在本地安装多个版本的公式。发生这种情况时,已安装的版本会在单独的列中生成,从第 3 列开始。

可以将输出重定向到一个文件,然后导入到 MS Excel/OpenOffice/LibreOffice/Google 表格中,或者可以使用简单的 shell 命令自动处理(cutgrep等)。

jq 脚本

(
  ["name", "latest", "installed version(s)"]
  ,
  (.[] | [ .name, .versions.stable, (.installed[] | .version) ])
)
| @tsv

此处列出的 JQ 脚本的第 1st 和第 5th 行(括号)未出现在完整的命令行中因为他们并不是真正需要的。它们在这里用于解释目的,但 JQ 运算符的优先级确保即使没有它们也能正确执行。

第 2nd 行生成一个包含此处显示的三个字符串文字的数组;它们代表最终输出的第一行(header)。它不使用输入数据。

3rd 行上的逗号将输入数据发送到第一个过滤器(第 2 行),然后发送到第二个过滤器(第 4 行),然后连接它们的输出。

第4遍历输入数组(brew info的输出是objects的数组)并发送每一项(|) 到后续过滤器,该过滤器从 installed 数组的所有值中提取字段 nameversions.stableversion 到数组 [ ... ] 中。它为每个公式生成一个包含三个或更多条目的数组。

第1st和第5th行的括号对上述过滤器的输出进行了分组,并将结果(|) 到下一个过滤器。

第 6 行的 @tsv 运算符将上面生成的每个数组转换为包含以逗号分隔的值的字符串。

JQ 命令行中的 -r 告诉它生成原始输出。这意味着,如果可能的话,不要生成 JSON 而是纯文本。没有它,脚本的输出是每个公式的编码为 JSON 的值(f.e。"jq\t1.6\t1.6" 字面意思)。有了它,输出只是字符串的值,没有任何编码或转义或其他 JSON 约定。

如果安装了多个版本的公式,脚本会在其行中生成 4 个或更多值。 3rd后面的值是本地安装的版本。

免责声明

我没有测试安装了多个版本的公式的脚本,我希望它能像描述的那样工作。我没有任何公式的多个版本,我不知道现在是否仍然可以安装多个版本的公式。以前是可以的,brew list可以显示,如果有的话。就 运行 brew list --multiple --versions.