होमबॉव के साथ स्थापित पैकेज के लिए दिए गए झंडे निर्धारित करें


17

क्या यह जांचने का एक तरीका है कि होमब्रे के साथ एक पैकेज स्थापित किए जाने पर क्या झंडे दिए गए थे?

उदाहरण के लिए, एमएसीएस सूत्र में झंडे की एक बेतुकी संख्या होती है। अगर मैंने किया

brew install emacs --with-glib --with-librsvg

मैं बाद में यह निर्धारित करना चाहूंगा कि ईमेक की होमब्रेव स्थापना के लिए मैंने झंडे दिए --with-glib --with-librsvgऔर किसी अन्य झंडे को नहीं।

लुआ पैकेज के साथ टेस्ट केस:

पैकेज स्थापित करने से पहले, जानकारी सभी विकल्पों को दिखाती है।

$ 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

जवाबों:


15

जब एक पैकेज स्रोत से बनाया जाता है तो निर्माण के लिए उपयोग किए जाने वाले झंडे दिखाए जाते हैं जब आप करते हैं brew info <package>

इस मामले में: brew info emacs | grep "Built from source"


काढ़ा जानकारी का आउटपुट हमेशा सूत्र के लिए सभी उपलब्ध विकल्पों को सूचीबद्ध करता है, न कि विकल्प का उपयोग करता है यदि पैकेज स्थापित किया गया था।
प्रिक्सोलिटिक

1
यह सच नहीं है। जानकारी निर्दिष्ट करती है कि क्या पैकेज बोतल से स्थापित किया गया था या स्रोत से बनाया गया था, और यदि इसे स्रोत से बनाया गया था तो यह उन झंडे को दिखाता है जो उपयोग किए गए थे।
एंड्रे

एक उदाहरण के साथ संपादित ओपी जिसमें, जहां तक ​​मैं बता सकता हूं, जानकारी स्रोत से निर्मित पैकेज के लिए उपयोग किए गए झंडे को निर्दिष्ट नहीं करती है।
प्रेक्सोलिटिक ३१'१४

2
ओह उफ़, मैं इसे देखता हूं और आपका grep कमांड अब समझ में आता है।
प्रेक्सोलिटिक ३१'१४

6

/usr/local/Cellarप्रत्येक पैकेज के नीचे एक फाइल है जिसे कहा जाता है INSTALL_RECEIPT.json, उदाहरण के लिए gawk:

/usr/local/Cellar/gawk/4.1.3/INSTALL_RECEIPT.json

यह परिभाषित करता है कि पैकेज कैसे स्थापित किया गया था। मुझे लगता है कि इसे एक्सेस करने का सही तरीका है

brew info --json=v1 <packagename>

जैसे

brew info --json=v1 gnuplot

यह सामान के भार को बाहर निकालता है, लेकिन यदि आप इसे jq(JSON प्रोसेसर - आसानी से उपलब्ध homebrew) के माध्यम से भेजते हैं, तो आप इस तरह से पैकेज को स्थापित करने के लिए उपयोग किए गए विकल्पों का चयन कर सकते हैं ( gnuplotपैकेज की जाँच ):

brew info --json=v1 gnuplot | jq '.[].installed[0].used_options'
[
    "--with-qt"
]

जो बताता है कि मैंने gnuplotप्रयोग करके स्थापित किया है :

brew install --with-qt 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 का उपयोग कर सकते हैं कि आप अन्यत्र उपयोग कर सकते हैं काढ़ा स्थापित आदेशों की एक सूची उत्पादन करने के लिए।
संकल्प

4

एक और उपयोगी उपकरण है homebrew-bundler। एक बार स्थापित होने के बाद brew tap Homebrew/bundle, आप चला सकते हैं brew bundle dumpऔर यह एक ब्रूफ़ाइल फ़ाइल बनाएगा जो आपके द्वारा इंस्टॉल किए गए किसी भी अतिरिक्त आर्गन्स के साथ स्थापित किए गए सभी पैकेजों को सूचीबद्ध करता है।


यह वास्तव में एक अच्छा विकल्प है। और, इसे संपादित करने Brewfileऔर इसे अपने डॉटफ़ाइल्स रेपो में जांचने के लिए नई मशीनों को "सेटअप" करना आसान बनाता है। हालाँकि, यह सभी निर्भरता सहित सभी पैकेजों को सूचीबद्ध करता है। मुझे वर्तमान में उस सूची से सूची को पार्स करना है brew leavesजो केवल शीर्ष-स्तर पर स्थापित पैकेजों को सूचीबद्ध करता है।
eduncan911

3

यहां थोड़ा सा बैश फंक्शन है जो पैकेज के स्रोत से बनाया गया है या नहीं इसके बावजूद झंडे को लौटाता है।

function brew_options()
{
    [ "$#" -ne 1 ] && >&2 echo -e "$FUNCNAME requires only 1 option, the package name" && return 1

    local item=$1
    local opts

    ## Check if package installed
    [ -n "$(brew ls --versions $item)" ] || ( >&2 echo -e "$item is not installed" && return 1 )

    set -o pipefail

    ## Get options if built from source
    if ! opts="$(brew info $item | grep 'Built from source with:' | sed 's/^[ \t]*Built from source with:/ /g; s/\,/ /g')" ; then
        # If not built from source, get options from brew metadata
        opts="$(brew info --json=v1 $item | jq -ec '.[].installed[0].used_options' | awk '{print substr($0, 2, length($0) - 2)}' | sed 's/,/ /g;s/"//g')"
    fi

    ## If we're able to get options and its just not spaces echo it 
    if [ "$?" -eq 0 ] && [[ ! -z "${opts// }" ]]; then
        echo "$opts"
    fi

    set +o pipefail

}

एक बैश स्क्रिप्ट लिखने के भीतर इस बैश फ़ंक्शन का उपयोग करने के लिए

 brew_options PKGNAME

PKGNAMEवांछित होमब्रेव पैकेज नाम कहां है। तुम भी एक bash स्क्रिप्ट के रूप में सभी स्थापित homebrew संकुल के माध्यम से iterate कर सकते हैं

 # Command to generate install script
 PKGS=$(brew list)

 # iterate through all packges
 for PKG in $PKGS; do

   echo $PKG `brew_options $PKG`

 done


अवसादन नोट: jqकमांड लाइन JSON प्रोसेसर
l --marc l
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.