Есть ли способ проверить, какие флаги были заданы, когда пакет был установлен вместе с homebrew?
Например, формула emacs имеет абсурдное количество флагов. Если я сделал
brew install emacs --with-glib --with-librsvg
Позже я хотел бы определить, что для домашней установки emacs я дал флаги, --with-glib --with-librsvg
а не другие флаги.
Тестовый набор с пакетом lua:
Перед установкой пакета информация показывает все опции.
$ brew info lua
lua: stable 5.2.3 (bottled)
http://www.lua.org/
Not installed
From: https://github.com/Homebrew/homebrew/blob/master/Library/Formula/lua.rb
==> Options
--universal
Build a universal binary
--with-completion
Enables advanced readline support
--without-sigaction
Revert to ANSI signal instead of improved POSIX sigaction
Я устанавливаю пакет только с --with-completion
флагом.
$ brew install lua --with-completion
==> Downloading http://www.lua.org/ftp/lua-5.2.3.tar.gz
######################################################################## 100.0%
==> Downloading http://luajit.org/patches/lua-5.2.0-advanced_readline.patch
######################################################################## 100.0%
==> Downloading http://lua-users.org/files/wiki_insecure/power_patches/5.2/lua-5
######################################################################## 100.0%
==> Patching
patching file Makefile
patching file src/Makefile
patching file src/lua.c
Hunk #1 succeeded at 231 (offset -5 lines).
Hunk #2 succeeded at 559 (offset -4 lines).
Hunk #3 succeeded at 575 (offset -4 lines).
patching file src/lua.c
==> make macosx INSTALL_TOP=/usr/local/Cellar/lua/5.2.3_1 INSTALL_MAN=/usr/local
==> make install INSTALL_TOP=/usr/local/Cellar/lua/5.2.3_1 INSTALL_MAN=/usr/loca
🍺 /usr/local/Cellar/lua/5.2.3_1: 13 files, 312K, built in 6 seconds
После установки пакета информация показывает все параметры, включая те, которые я не использовал. Команда подтверждает, что пакет был собран из источника, а не вылит из бутылки.
$ brew info lua
lua: stable 5.2.3 (bottled)
http://www.lua.org/
/usr/local/Cellar/lua/5.2.3_1 (13 files, 312K) *
Built from source with: --with-completion
From: https://github.com/Homebrew/homebrew/blob/master/Library/Formula/lua.rb
==> Options
--universal
Build a universal binary
--with-completion
Enables advanced readline support
--without-sigaction
Revert to ANSI signal instead of improved POSIX sigaction
Существует файл в
/usr/local/Cellar
под каждый пакет , который называетсяINSTALL_RECEIPT.json
, например , дляgawk
:это определяет, как пакет был установлен. Я думаю, что правильный способ доступа к нему с
например
Это извергает кучу вещей, но если вы отправите их через
jq
(JSON Processor - легко доступны черезhomebrew
), вы можете выбрать параметры, которые вы использовали для установки пакета, как это (проверкаgnuplot
пакета):который говорит мне, что я установил,
gnuplot
используя:источник
for package in $(brew list); do echo -n "brew install $package "; for item in $(brew info --json=v1 $package | jq -r '.[0].installed[0].used_options | .[]'); do echo -n "$item "; done; echo ; done 2>/dev/null
может использоваться для вывода списка команд brew install, которые вы можете использовать в другом месте.Еще один полезный инструмент
homebrew-bundler
. После установки черезbrew tap Homebrew/bundle
, вы можете запустить,brew bundle dump
и он создаст файл Brewfile, в котором перечислены все установленные вами пакеты, а также любые дополнительные аргументы, использованные для их установки.источник
Brewfile
и зарегистрировать его в своем репозитории dotfiles, легко "настроить" новые машины. Тем не менее, в нем перечислены все пакеты, включая все зависимости. В настоящее время мне приходится анализировать список изbrew leaves
списка, в котором перечислены только установленные пакеты верхнего уровня.Вот небольшая функция bash, которая возвращает флаги независимо от того, был ли пакет собран из исходного кода или нет.
Чтобы использовать эту функцию bash в скрипте bash, напишите
где
PKGNAME
название желаемой домашней упаковки. Вы также можете перебрать все установленные пакеты homebrew в скрипте bash как,
источник
jq
процессор JSON командной строки