我们正在尝试获取每个已安装的软件包的版本。 任何人都可以帮忙提供像这样打印的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
需要有关如何从公共检索最新版本并追加的建议?
--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 脚本的第 1st
和第 5th 行(括号)未出现在完整的命令行中,因为实际上并不需要它们。它们在这里出于解释目的而出现,但 JQ 运算符的优先级确保即使没有它们也能正确执行。 第 2
nd行生成一个数组,其中包含此处显示的三个字符串文字;它们代表最终输出的第一行(标题)。它不使用输入数据。 第 3
rd行上的逗号将输入数据发送到第一个过滤器(第 2 行),然后发送到第二个过滤器(第 4 行),然后连接它们的输出。 第 4
行迭代输入数组(brew info
的输出是一个对象数组),并将每个项目 (
|
) 发送到后续过滤器,该过滤器提取字段 name
、versions.stable
和version
(从 installed
数组的所有值)转换为数组 [ ... ]
。它为每个公式生成一个包含三个或更多条目的数组。第 1st 和 5th 行上的括号对上述过滤器的输出进行分组,并将结果 (|
) 传递到下一个过滤器。
行上的
@tsv
运算符将上面生成的每个数组转换为包含用逗号分隔的值的字符串。
JQ 命令行中的 -r
告诉它生成原始输出。这意味着,如果可能的话,不生成 JSON,而是生成纯文本。如果没有它,脚本的输出就是每个公式编码为 JSON 的值(例如字面上的
"jq\t1.6\t1.6"
)。使用它,输出只是字符串的值,没有任何编码或转义或其他 JSON 约定。如果安装了公式的多个版本,脚本会在其行上生成 4 个或更多值。第3rd及其后的值是本地安装的版本。 免责声明
brew list
可以显示它们。只要跑
brew list --multiple --versions
。