查询 brew

在此文档中,我们将使用 jq 来解析 JSON,可使用 brew install jq 从 Homebrew 获取。

概述

brew 提供命令以从系统中获取常见类型的信息。 brew list 显示已安装的配方。 brew deps foo 显示 foo 所需的依赖项。

当然可以编写其他命令(包括外部命令)以提供更详细的信息。这里有一些缺点。首先,它要求针对可能更改的 Homebrew 代码库编写 Ruby。在重构期间将有更多代码需要修改,并且 Homebrew 无法保证外部命令将继续有效。其次,它要求设计命令本身,指定输入参数和输出格式。

为了使用户能够在没有上述问题的情况下进行丰富的查询,Homebrew 提供了 brew info 命令。

brew info --json

brew info 可以输出有关配方的 JSON 格式信息。然后可以使用你选择的工具解析此 JSON。在 brew info --help 中查看更多详细信息。

默认架构版本为 v1,它返回有关配方的信息;指定 --json=v2 以包括配方和木桶。请注意,可以根据需要将字段添加到架构中,而无需增加架构。任何重大破坏性更改都将导致架构版本更改。

架构本身目前未在 formula.rb 代码之外的文档中记录,它会生成架构。

示例

JSON 输出的顶级元素始终是一个数组,因此 map 运算符用于对数据进行操作。

漂亮打印单个配方的信息

brew info --json=v1 tig | jq .

已安装的配方

要显示有关所有已安装配方的完整 JSON 信息

brew info --json=v1 --installed

已链接的仅木桶配方

一些配方标记为“仅木桶”,这意味着已安装的文件未链接到共享的 binlib 等目录,因为这样做会导致冲突。此类配方可以强制链接到共享目录,但不建议这样做(并且会导致 brew doctor 抱怨。)

要查找已链接的仅木桶配方的名称

brew info --json=v1 --installed | jq "map(select(.keg_only == true and .linked_keg != null) | .name)"

未链接的普通配方

要查找已安装但未链接到共享目录的普通(非仅木桶)配方的名称

brew info --json=v1 --installed | jq "map(select(.keg_only == false and .linked_keg == null) | .name)"

formulae.brew.sh

formulae.brew.sh 有一个 已记录的 JSON API,它提供对 brew info --json=v1 输出的访问,而无需访问 Homebrew。

总结

通过使用 JSON 输出,可以针对 Homebrew 进行查询,而无需担心因 Homebrew 代码更改而中断,也无需了解 Homebrew 的 Ruby 内部结构。

如果 JSON 输出未提供它应该提供的一些信息,请提交请求,最好附上添加所需信息的补丁。

Fork me on GitHub