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

问题描述 投票:0回答:1

我们正在尝试获取每个已安装的软件包的版本。 任何人都可以帮忙提供像这样打印的brew命令吗?

Name Installed Latest ant 1.9.4 1.9.4 maven 3.6.3 3.6.3 [email protected] 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

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

macos homebrew
1个回答
9
投票
--json

brew info
选项获取 JSON 格式的公式信息,并使用
jq
从中提取版本。比使用
grep
aws
或其他面向线条的工具更安全、更容易。
如果尚未安装,请使用 

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 输出中提取所需的信息。
它会生成一个制表符分隔值的列表,其中包含以下列:

name

latest
installed versions(s)
。交换列的顺序是因为本地可能安装多个版本的公式。发生这种情况时,已安装的版本会在单独的列中生成,从第 3 列开始。
输出可以重定向到文件,然后导入到 MS Excel/OpenOffice/LibreOffice/Google Sheets 中,也可以使用简单的 shell 命令(

cut

grep
等)自动处理。

jq

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

此处列出的 JQ 脚本的第 1
st

和第 5th 行(括号)未出现在完整的命令行中,因为实际上并不需要它们。它们在这里出于解释目的而出现,但 JQ 运算符的优先级确保即使没有它们也能正确执行。 第 2

nd

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

rd

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

行迭代输入数组(brew info 的输出是一个对象数组),并将每个项目 (

|
) 发送到后续过滤器,该过滤器提取字段
name
versions.stable
version
(从
installed
数组的所有值)转换为数组
[ ... ]
。它为每个公式生成一个包含三个或更多条目的数组。
第 1

st

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

第 6

行上的

@tsv
运算符将上面生成的每个数组转换为包含用逗号分隔的值的字符串。 JQ 命令行中的

-r

告诉它生成原始输出。这意味着,如果可能的话,不生成 JSON,而是生成纯文本。如果没有它,脚本的输出就是每个公式编码为 JSON 的值(例如字面上的

"jq\t1.6\t1.6"
)。使用它,输出只是字符串的值,没有任何编码或转义或其他 JSON 约定。
如果安装了公式的多个版本,脚本会在其行上生成 4 个或更多值。第3

rd

及其后的值是本地安装的版本。 免责声明

我没有测试安装了多个版本的公式的脚本,我希望它能按描述的那样工作。我没有任何公式的多个版本,我不知道现在是否仍然可以安装公式的多个版本。过去是可能的,如果是的话,

brew list

可以显示它们。只要跑

brew list --multiple --versions
    

© www.soinside.com 2019 - 2024. All rights reserved.