पता लगाएँ कि क्या 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
जेबलिन

जवाबों:


164

आप उपयोग कर सकते हैं

brew ls --versions myformula

संबंधित सूत्र के स्थापित संस्करणों को आउटपुट करने के लिए। यदि सूत्र स्थापित नहीं है, तो आउटपुट रिक्त होगा।

होमब्रे के हाल के संस्करणों का उपयोग करते समय, जिसे आप प्राप्त कर सकते हैं brew update, आप इसे चला सकते हैं (धन्यवाद स्लावेन):

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

उस ने कहा, यह संभवतः एक अच्छा विचार है कि उपकरण के अस्तित्व के लिए जाँच करें और न केवल संबंधित होमब्रेव पैकेज के लिए जाँच करें (जैसे निष्पादन योग्य के लिए खोज करके $PATH)। लोग अभ्यास में तरीकों की एक बड़ी मात्रा में उपकरण स्थापित करने की प्रवृत्ति रखते हैं, होमब्रे उनमें से सिर्फ एक है।


6
चूंकि github.com/Homebrew/brew/commit/… यह निकास कोड की जाँच करने के लिए पर्याप्त है: यदि सूत्र स्थापित नहीं है, तो गलत (1) वापस आ जाता है।
स्लावेन रेज़िक

तो अगर मैं दौड़ता हूं if macchanger --help > /dev/null; then, तो क्या macchangerयह स्थापित है कि जाँच करेगा ?
अनाम

@KeeganKuhn यदि वह सफल हुआ, तो macchangerवर्तमान शेल में है $PATH। यदि यह विफल रहता है, तो यह या तो पथ में उपलब्ध नहीं है या स्थापित नहीं है।
होल्गर बस

2
@ कीगन कुह्न - यदि आप वास्तव में केवल यह जांचना चाहते हैं कि क्या कोई एप्लिकेशन पीएटीएच पर है (इसे चलाने के बिना), तो आप उपयोग कर सकते हैं which -s-sविकल्प (मूक) प्रलेखित है के रूप में "-s कोई उत्पादन, बस लौट 0 यदि निष्पादनयोग्य के किसी भी पाए जाते हैं, या 1 यदि कोई भी पाए जाते हैं।" उचित उपयोग कुछ इस तरह हैwhich macchanger || echo "macchanger not on PATH"
जेफरी एगुइलेरा

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

आपके समाधान कुछ संस्करण सूत्र जैसे python@3कि स्थापित (और सूचीबद्ध) के साथ काम नहीं करते हैं python3
डेनियल ऑरलैंडो

1
# install if we haven't installed any version
brew ls --versions $lib || brew install $lib
# install if we haven't installed latest version
brew outdated $lib || brew install $lib

1

सबसे आसान दो-लाइनर: एक कदम, सुनिश्चित करें कि यह स्थापित है

$ realpath . || brew install coreutils

यह वर्तमान dir के realpath का प्रिंट आउट करेगा, यदि नहीं, तो यह इसे स्थापित करेगा। और यह भी नहीं मिला realpath नहीं मिलेगा।

चरण दो, इसे अपने वास्तविक कोड में कॉल करें:

$ realpath ${someDir}

यह एक विशिष्ट उपकरण के लिए एक आसान समाधान है। यह एक सामान्य समाधान नहीं है।
बिल्टमोन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.