在 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
从中提取版本。它比使用 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 输出中提取所需的信息。
它生成一个包含 tab-separated 个值的列表,其中包含以下列:name
、latest
和 installed versions(s)
。列的顺序被交换,因为可以在本地安装多个版本的公式。发生这种情况时,已安装的版本会在单独的列中生成,从第 3 列开始。
可以将输出重定向到一个文件,然后导入到 MS Excel/OpenOffice/LibreOffice/Google 表格中,或者可以使用简单的 shell 命令自动处理(cut
、grep
等)。
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
数组的所有值中提取字段 name
、versions.stable
和 version
到数组 [ ... ]
中。它为每个公式生成一个包含三个或更多条目的数组。
第1st和第5th行的括号对上述过滤器的输出进行了分组,并将结果(|
) 到下一个过滤器。
第 6 行的 @tsv
运算符将上面生成的每个数组转换为包含以逗号分隔的值的字符串。
JQ 命令行中的 -r
告诉它生成原始输出。这意味着,如果可能的话,不要生成 JSON 而是纯文本。没有它,脚本的输出是每个公式的编码为 JSON 的值(f.e。"jq\t1.6\t1.6"
字面意思)。有了它,输出只是字符串的值,没有任何编码或转义或其他 JSON 约定。
如果安装了多个版本的公式,脚本会在其行中生成 4 个或更多值。 3rd后面的值是本地安装的版本。
免责声明
我没有测试安装了多个版本的公式的脚本,我希望它能像描述的那样工作。我没有任何公式的多个版本,我不知道现在是否仍然可以安装多个版本的公式。以前是可以的,brew list
可以显示,如果有的话。就 运行 brew list --multiple --versions
.
我们正在尝试获取每个包的版本已安装。
任何人都可以帮忙提供将像这样打印的 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
从中提取版本。它比使用 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 输出中提取所需的信息。
它生成一个包含 tab-separated 个值的列表,其中包含以下列:name
、latest
和 installed versions(s)
。列的顺序被交换,因为可以在本地安装多个版本的公式。发生这种情况时,已安装的版本会在单独的列中生成,从第 3 列开始。
可以将输出重定向到一个文件,然后导入到 MS Excel/OpenOffice/LibreOffice/Google 表格中,或者可以使用简单的 shell 命令自动处理(cut
、grep
等)。
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
数组的所有值中提取字段 name
、versions.stable
和 version
到数组 [ ... ]
中。它为每个公式生成一个包含三个或更多条目的数组。
第1st和第5th行的括号对上述过滤器的输出进行了分组,并将结果(|
) 到下一个过滤器。
第 6 行的 @tsv
运算符将上面生成的每个数组转换为包含以逗号分隔的值的字符串。
JQ 命令行中的 -r
告诉它生成原始输出。这意味着,如果可能的话,不要生成 JSON 而是纯文本。没有它,脚本的输出是每个公式的编码为 JSON 的值(f.e。"jq\t1.6\t1.6"
字面意思)。有了它,输出只是字符串的值,没有任何编码或转义或其他 JSON 约定。
如果安装了多个版本的公式,脚本会在其行中生成 4 个或更多值。 3rd后面的值是本地安装的版本。
免责声明
我没有测试安装了多个版本的公式的脚本,我希望它能像描述的那样工作。我没有任何公式的多个版本,我不知道现在是否仍然可以安装多个版本的公式。以前是可以的,brew list
可以显示,如果有的话。就 运行 brew list --multiple --versions
.