7.3 用 JSON 查询与脚本化 brew

原文链接: https://docs.brew.sh/Querying-Brew

为什么需要 JSON 接口

brew list 列出已安装 formula,brew deps foo 显示 foo 的依赖。想获得更丰富、结构化的信息,官方建议使用 brew info 的 JSON 输出,而不是针对 Homebrew 内部 Ruby 代码编写脚本。外部命令会随 Homebrew 代码重构而变化,而 JSON 输出更稳定。下面的示例统一用 jq 解析 JSON:

1
brew install jq

brew info –json

1
brew info --json=v1 tig | jq .
  • 默认 schema 版本为 v1,只包含 formula 信息;
  • --json=v2 同时包含 formula 与 cask;
  • schema 在不升级版本号的情况下可以新增字段;破坏性变更才会提升 schema 版本。

常用查询

JSON 输出的顶层元素永远是数组,因此用 map 处理。查看所有已安装 formula 的完整 JSON:

1
brew info --json=v1 --installed

找出已链接的 keg-only formula:

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

找出已安装但没有链接的普通 formula:

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

结合 brew deps、brew uses 与 jq,可以写出“哪些已安装包依赖 openssl”“哪些包没有 bottle”等一次性诊断脚本。

无需本机即可查询:formulae.brew.sh API

formulae.brew.sh 提供有文档的 JSON API,可以直接访问 brew info --json=v1 的同类数据,不要求本机安装 Homebrew。适合构建网页、监控或 CI 脚本。

结论与建议

  • 优先用 JSON 输出而不是解析终端彩色文本;
  • 若 JSON 缺少你需要的信息,到官方仓库提交请求,最好附带补丁;
  • 在 4.3 维护与诊断:doctor、cleanup、config 中提到的 brew config 也是脚本友好的文本来源。