Запросы к brew
В этом документе мы будем использовать jq для разбора JSON; его можно установить через Homebrew с помощью brew install jq.
Обзор
brew предоставляет команды для получения из системы распространённых типов информации. brew list показывает установленные формулы. brew deps foo показывает зависимости, необходимые foo.
Разумеется, можно написать дополнительные команды, в том числе внешние, чтобы получать более подробную информацию. Однако у такого подхода есть несколько недостатков. Во-первых, для этого нужно писать код на Ruby, зависящий от потенциально изменяющейся кодовой базы Homebrew. При рефакторинге придётся изменять больше кода, а 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
Связанные формулы keg-only
Некоторые формулы помечены как «keg-only», то есть установленные файлы не связываются с общими каталогами bin, lib и т. д., поскольку это может привести к конфликтам. Такие формулы можно принудительно связать с общими каталогами, однако делать этого не рекомендуется (и это вызовет предупреждение brew doctor.)
Чтобы найти имена связанных формул keg-only:
brew info --json=v1 --installed | jq "map(select(.keg_only == true and .linked_keg != null) | .name)"
Несвязанные обычные формулы
Чтобы найти имена установленных обычных формул (не keg-only), которые не связаны с общими каталогами:
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 отсутствует какая-либо информация, которая там должна быть, отправьте запрос, желательно вместе с исправлением, добавляющим нужную информацию.
© 2009–present Homebrew contributors
Licensed under the BSD 2-Clause License.
https://docs.brew.sh/Querying-Brew