यह जांचना कि क्या बैश लिपि से कोई माणिक रत्न स्थापित किया गया है


14

मुझे एक बैश स्क्रिप्ट से यह देखने की ज़रूरत है कि क्या कुछ रूबी रत्न स्थापित हैं या नहीं।

मुझे लगा कि मैं कुछ ऐसा कर सकता हूं

if ! gem list <name>; then do_stuff; fi

लेकिन कमांड लाइन पर परीक्षण से echo $?पता चलता है कि gem list <name>रिटर्न 0 की परवाह किए बिना अगर वास्तव में नाम मिला है।

क्या इसका मतलब है कि मुझे मणि सूची के उत्पादन को फ़िल्टर करने के लिए grep का उपयोग करना होगा, या क्या कोई बेहतर तरीका है कि मैं यह देखने के लिए जांच कर सकता हूं कि क्या एक मणि स्थापित है?

जवाबों:


26

gem list <name> -itrueयदि रत्न स्थापित है और falseअन्यथा स्ट्रिंग वापस आ जाएगी । इसके अलावा, रिटर्न कोड वही हैं जो आप उम्मीद करेंगे।

अधिक जानकारियां के लिए, देखें gem help list


संपादित करें: @Riateche ने सही ढंग से देखा कि यदि आप किसी ऐसे रत्न का नाम खोजते हैं जो अन्यथा स्थापित रत्न का विकल्प है तो यह गलत सकारात्मकता दे सकता है। इससे बचने के लिए, एक रेगेक्स सिंटैक्स का उपयोग करें:

gem list '^<name>$' -i

(उदाहरण:) gem list '^mini$' -i


1
यह जांचने के लिए कि क्या कोई विशिष्ट संस्करण स्थापित है, बस जोड़ें --version: उदा gem list -i compass --version 0.12.4
मोफ्फू

6

ऐसा लगता है जैसे gem specकि नाम में मणि स्थापित नहीं होने पर कमांड एक त्रुटि के साथ विफल हो जाएगी। इसलिए:

if ! gem spec <name> > /dev/null 2>&1; then
  echo "Gem <name> is not installed!"
fi

मुझे नहीं पता कि यह इसे हल करने का विहित तरीका है, लेकिन यह काम करता है।


3

आप queryउप-कमांड का उपयोग कमांड के लिए भी कर सकते हैं gem

$ gem query -i -n bundler 
true
उपयोग अंश
$ gem help query
Usage: gem query [options]

  Options:
    -i, --[no-]installed             Check for installed gem
    -I                               Equivalent to --no-installed
    -v, --version VERSION            Specify version of gem to query
                                     for use with --installed
    -n, --name-matches REGEXP        Name of gem(s) to query on matches the
                                     provided REGEXP

-vस्विच का उपयोग करके विशिष्ट संस्करणों के लिए भी देखेगा ।

$ gem query -i -n bundler -v 1.6.2.1
false

1
डाउनवोट के लिए माफी, लेकिन जैसा कि मैन पेज में बताया गया है gem query: "क्वेरी कमांड सूची और खोज आदेशों का आधार है। आपको वास्तव में इसके बजाय सूची और खोज आदेशों का उपयोग करना चाहिए। यह कमांड का उपयोग करना बहुत कठिन है।" ... एसओ समुदाय में बुरी आदतें पैदा नहीं करना चाहते हैं! :-)
pvandenberk
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.