กำหนดแฟล็กที่ให้สำหรับแพ็กเกจที่ติดตั้งด้วย homebrew


17

มีวิธีตรวจสอบว่ามีการให้ค่าสถานะใดเมื่อติดตั้งแพคเกจด้วยโฮมบรูว์หรือไม่

ตัวอย่างเช่นสูตร emacs มีจำนวนแฟล็กที่ไร้สาระ ถ้าฉันทำ

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

ฉันต้องการตรวจสอบในภายหลังว่าสำหรับการติดตั้ง homebrew ของ 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

คำตอบ:


15

brew info <package>เมื่อเป็นแพคเกจที่ถูกสร้างขึ้นจากแหล่งธงที่ใช้ในการสร้างจะปรากฏเมื่อคุณทำ

ในกรณีนี้: brew info emacs | grep "Built from source"


เอาต์พุตของข้อมูล Brew แสดงรายการตัวเลือกที่มีอยู่ทั้งหมดสำหรับสูตรไม่ใช่ตัวเลือกที่ใช้หากติดตั้งแพคเกจ
Praxeolitic

1
ที่ไม่เป็นความจริง. ข้อมูลระบุว่ามีการติดตั้งแพคเกจจากขวดหรือบิวด์จากแหล่งที่มาและถ้ามันถูกสร้างขึ้นจากแหล่งที่มามันจะแสดงสถานะที่ใช้
André

แก้ไข OP ด้วยตัวอย่างซึ่งเท่าที่ฉันสามารถบอกได้ข้อมูลไม่ได้ระบุแฟล็กที่ใช้สำหรับแพ็กเกจที่สร้างจากแหล่งที่มา
Praxeolitic

2
โอ้โอ้ฉันเห็นแล้วและคำสั่ง grep ของคุณสมเหตุสมผลแล้ว
Praxeolitic

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 

นี่ควรเป็นคำตอบ
Jacob Degeling

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 สามารถใช้เพื่อแสดงรายการของคำสั่งติดตั้งชงที่คุณสามารถใช้ที่อื่น
Sankalp

4

homebrew-bundlerอีกเครื่องมือที่มีประโยชน์คือ เมื่อติดตั้งผ่านbrew tap Homebrew/bundleแล้วคุณสามารถเรียกใช้brew bundle dumpและมันจะสร้างไฟล์ Brewfile ที่แสดงรายการแพ็คเกจทั้งหมดที่คุณติดตั้งพร้อมกับ args เพิ่มเติมใด ๆ ที่ใช้ในการติดตั้ง


นี่เป็นตัวเลือกที่ดีแน่นอน และหากต้องการแก้ไขBrewfileและตรวจสอบลงใน repo dotfiles ของคุณทำให้ง่ายต่อการ "ตั้งค่า" เครื่องใหม่ แม้ว่ามันจะแสดงรายการแพคเกจทั้งหมดรวมถึงการอ้างอิงทั้งหมด ขณะนี้ฉันต้องแยกวิเคราะห์รายการจาก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

}

ในการใช้ฟังก์ชัน bash นี้ภายในสคริปต์ bash write

 brew_options PKGNAME

โดยที่PKGNAMEเป็นชื่อแพ็กเกจ homebrew ที่ต้องการ คุณยังสามารถทำซ้ำผ่านแพ็คเกจ homebrew ที่ติดตั้งทั้งหมดภายในสคริปต์ทุบตีเป็น

 # 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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.