ตรวจสอบว่ามีการติดตั้งแพ็คเกจ homebrew หรือไม่


104

ฉันกำลังจะเขียนเชลล์สคริปต์เพื่อตรวจสอบว่ามีการติดตั้งแพ็กเกจโฮมบรูว์ในระบบหรือไม่ มีวิธีใช้คำสั่งชงเพื่อให้บรรลุสิ่งนั้นหรือไม่?

ฉันลองใช้รหัสทางออกของbrew install <formula> --dry-run. แต่สิ่งนี้จะสร้างแพ็คเกจหากขาดหายไป


brew --cellar "$formula" >/dev/null 2>&1 --cellar formula: Display the location in the cellar where formula would be installed, without any sort of versioned directory as the last path. หน้าคนชง ; อยากจะให้มันเป็นคำตอบ
166_MMX

if [ ! -x "$(command -v PKG_EXEC)" ]; then # package not installed fi
JBallin

คำตอบ:


165

คุณสามารถใช้ได้

brew ls --versions myformula

เพื่อส่งออกเวอร์ชันที่ติดตั้งของสูตรตามลำดับ หากไม่ได้ติดตั้งสูตรผลลัพธ์จะว่างเปล่า

เมื่อใช้ homebrew เวอร์ชันล่าสุดซึ่งคุณสามารถใช้งานได้brew updateคุณสามารถเรียกใช้สิ่งนี้ได้ (ขอบคุณ Slaven):

if brew ls --versions myformula > /dev/null; then
  # The package is installed
else
  # The package is not installed
fi

ที่กล่าวว่าเป็นความคิดที่ดีที่จะตรวจสอบการมีอยู่ของเครื่องมือเลยไม่ใช่แค่การตรวจสอบแพคเกจ homebrew ตามลำดับ (เช่นค้นหาไฟล์ปฏิบัติการในไฟล์$PATH) ผู้คนมักจะติดตั้งเครื่องมือในทางปฏิบัติเป็นจำนวนมากโดยที่ homebrew เป็นเพียงหนึ่งในนั้น


6
เนื่องจากgithub.com/Homebrew/brew/commit/…จึงเพียงพอที่จะตรวจสอบรหัสออก: หากไม่ได้ติดตั้งสูตรจะส่งคืนเท็จ (1)
Slaven Rezic

ถ้าฉันรันif macchanger --help > /dev/null; thenจะตรวจสอบว่าmacchangerติดตั้งหรือไม่?
ไม่ระบุชื่อ

@KeeganKuhn หากที่ประสบความสำเร็จนั้นอยู่ในเปลือกปัจจุบันmacchanger $PATHหากล้มเหลวแสดงว่าไม่มีใน PATH หรือไม่ได้ติดตั้ง
Holger เพียง

2
@Keegan Kuhn - หากคุณต้องการตรวจสอบว่ามีแอปพลิเคชันอยู่บน PATH หรือไม่ (โดยไม่ต้องเรียกใช้) คุณสามารถwhich -sใช้ได้ -sตัวเลือก (เงียบ) เป็นเอกสารที่เป็น "-s ไม่มีการส่งออกเพียงแค่กลับ 0 ถ้าใด ๆ ของ executables จะพบหรือ 1 ถ้าไม่มีจะพบว่า." การใช้งานที่เหมาะสมเป็นสิ่งที่ชอบwhich macchanger || echo "macchanger not on PATH"
Jeffrey Aguilera

7

เกี่ยวกับอะไร?

for pkg in macvim ngrep other needed packages; do
    if brew list -1 | grep -q "^${pkg}\$"; then
        echo "Package '$pkg' is installed"
    else
        echo "Package '$pkg' is not installed"
    fi
done

การแก้ปัญหาของคุณไม่ได้ทำงานกับสูตร versioned บางอย่างเช่นpython@3ที่มีการติดตั้ง (และที่ระบุไว้) python3เช่น
Daniele Orlando


1

สองสมุทรที่ง่ายที่สุด: ขั้นตอนที่หนึ่งตรวจสอบให้แน่ใจว่าได้ติดตั้งแล้ว

$ realpath . || brew install coreutils

สิ่งนี้จะพิมพ์ realpath ของ dir ปัจจุบันหากไม่เป็นเช่นนั้นจะทำการติดตั้ง และจะไม่ล้มเหลวแม้ไม่พบ realpath

ขั้นตอนที่สองเรียกตามรหัสจริงของคุณ:

$ realpath ${someDir}

นี่เป็นวิธีง่ายๆสำหรับเครื่องมือเฉพาะ ไม่ใช่วิธีแก้ปัญหาทั่วไป
iltempo
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.