मैं ऐसे वातावरण में काम करता हूँ जहाँ हम Red Hat Enterprise Linux 5 से धीरे धीरे RHEL 6 में मशीनों को परिवर्तित कर रहे हैं।
मुझे अपनी स्क्रिप्ट की आवश्यकता है कि आरएचईएल 6 मशीनों पर कुछ अलग करने के लिए जो वर्तमान में आरएचईएल 5 मशीनों पर किया जा रहा है।
व्यावहारिक समाधान रनटाइम पर जांचना और आरएचईएल 5 पर कुछ कमांड चलाना, आरएचईएल 6 पर अन्य और दोनों पर कुछ करना है।
इसका एक व्यावहारिक उदाहरण यह है कि हम पर्यावरण मॉड्यूल का उपयोग कर रहे हैं और मेरी .bashrc
एक module load git
पंक्ति भी शामिल है , लेकिन RHEL6 मशीनों पर यह कमांड त्रुटियां हैं:
RHEL6 system, git should be installed - not loading module
मॉड्यूलफाइल में देखने से मुझे निम्नलिखित कोड मिलते हैं:
set redhatrelease [eval exec "cat /etc/redhat-release"]
if { [regexp -nocase {release 6} $redhatrelease] } {
puts stderr "\n\t RHEL6 system, git should be installed - not loading module\n"
} else {
...
}
ऐसा लगता है कि मैं क्या चाहता हूं, लेकिन मैं कुछ छोटा होने की उम्मीद कर रहा था।
तो, bash स्क्रिप्ट में RHEL6 से RHEL5 को बताने का सबसे आसान तरीका क्या है?
आदर्श रूप से यह विभिन्न प्रमुख संस्करणों में मजबूत होना चाहिए, लेकिन मामूली रिलीज संख्या में भिन्नता के प्रति सहनशील होना चाहिए।
git
बैश मॉड्यूल की आवश्यकता है , तो आप यह जांचते हैं कि क्या यह कॉल करने से पहले मौजूद है। जब / यदि यह बाद में दिखाई देता है, तो आपके चेक के परिणाम बदल जाते हैं, इसलिए अचानक कोई अतिरिक्त प्रयास किए बिना, सुविधा काम करना शुरू कर देती है।
lsb_release -r
अन्य पाठ भी शामिल हैं, जैसे Release: 5.8
। जैसा कि डेनिस कार्सेमेकर बताते हैं , यदि आप lsb_release -rs
इसके बजाय उपयोग करते हैं, तो आपको सिर्फ नंबर मिलता है।
lsb_release
काम करता है ? (-r
आपको बस नंबर देने की जरूरत है,-a
उपलब्ध सब कुछ देखने की भी कोशिश करें ) यदि ऐसा है, तो वह भी क्रॉस-वेंडर है।