वहाँ कुछ तरीके हैं जो आप प्राप्त करना चाहते हैं।
1. $ BASH_VERSION का उपयोग करें
यह देखने के लिए पर्याप्त है कि $BASH_VERSION
चर में क्या है । व्यक्तिगत रूप से मैं इस तरह से सबस्क्रिप्शन का उपयोग करूंगा:
$ (read -d "." version trash <<< $BASH_VERSION; echo "$version" )
4
ध्यान दें कि <<<
यहाँ-डॉक के लिए सिंटैक्स पोर्टेबल नहीं है, अगर आप इसका उपयोग करने जा रहे हैं /bin/sh
, जो उबंटू पर डैश है और एक अलग सिस्टम पर कुछ और हो सकता है
वैकल्पिक तरीका केस स्टेटमेंट या यदि स्टेटमेंट है। व्यक्तिगत रूप से, मैं यह करूँगा:
bash-4.3$ case $BASH_VERSION in 4.*) echo "Can use associative arrays";; ?) echo "can't use associative arrays" ;; esac
Can use associative arrays
संभवतः पोर्टेबिलिटी के लिए, आपको शायद यह जांचना चाहिए कि क्या ऐसा वैरिएबल पहली बार में किसी चीज़ के साथ सेट किया गया है [ -n $BASH_VERSION ]
यह पूरी तरह से एक स्क्रिप्ट में उपयोग किए जाने वाले फ़ंक्शन के रूप में फिर से लिखा जा सकता है। कुछ लंबी लाइनें:
#!/bin/bash
version_above_4(){
# check if $BASH_VERSION is set at all
[ -z $BASH_VERSION ] && return 1
# If it's set, check the version
case $BASH_VERSION in
4.*) return 0 ;;
?) return 1;;
esac
}
if version_above_4
then
echo "Good"
else
echo "No good"
fi
यह वन-लाइनर नहीं है, हालांकि यह बहुत बेहतर है। मात्रा से अधिक गुणवत्ता।
2. जांचें कि क्या स्थापित है
उसके लिए आपको इस apt-cache policy
तरह के आउटपुट को फ़िल्टर करना होगा
$ apt-cache policy bash | awk -F '[:.]' '/Installed:/{printf "%s\n",substr($2,2)}'
4
dpkg-query
कुछ छानने के माध्यम से भी काम में आ सकता है awk
।
$ dpkg-query -W bash | awk '{print substr($2,1,1)}'
4
ध्यान दें कि यह पोर्टेबल नहीं है, क्योंकि अगर कोई सिस्टम dpkg
या apt
इंस्टाल पर स्थापित नहीं है (उदाहरण के लिए, आरएचईएल या फ्रीबीएसडी), तो यह आपको कोई अच्छा काम नहीं देगा।
3. यदि कोई त्रुटि हो तो स्क्रिप्ट से बाहर निकलने के लिए सेट -e का उपयोग करें
इसके चारों ओर जाने का एक तरीका सिर्फ एक सहयोगी साहचर्य से आगे जाना है और जब bash
उनका उपयोग नहीं किया जा सकता है तो उसे छोड़ दें। set -e
नीचे लाइन #!/bin/bash
है, तो स्क्रिप्ट साहचर्य सरणी का उपयोग नहीं कर सकते हैं स्क्रिप्ट छोड़ने की अनुमति देगा।
इससे आपको उपयोगकर्ता को स्पष्ट रूप से बताने की आवश्यकता होगी: "अरे, आपको वास्तव में 4.3 या इसके बाद के संस्करण की आवश्यकता है, अन्यथा स्क्रिप्ट काम नहीं करेगी"। तब जिम्मेदारी उपयोगकर्ता के साथ रहती है, हालांकि कुछ लोग तर्क दे सकते हैं कि यह वास्तव में सॉफ्टवेयर विकास के लिए एक अच्छा दृष्टिकोण नहीं है।
4. सभी आशाओं का त्याग करें और पोर्टेबल, POSIX- अनुरूप स्क्रिप्ट लिखें
bash
स्क्रिप्ट पोर्टेबल नहीं हैं क्योंकि इसका सिंटेक्स बॉर्न शेल के साथ संगत नहीं है। यदि आप जो स्क्रिप्ट लिख रहे हैं, वह केवल उबंटू ही नहीं, बल्कि विभिन्न प्रणालियों की एक श्रृंखला पर उपयोग होने वाली है, तो सभी आशाओं को छोड़ दें, और साहचर्य सरणियों के अलावा कुछ और उपयोग करने के तरीके खोजें। जिसमें दो एरेज़ या कॉन्फ़िगरेशन फ़ाइल पार्स करना शामिल हो सकता है। एक अलग भाषा, पर्ल या पायथन पर स्विच करने पर भी विचार करें, जहां वाक्यविन्यास कम से कम अधिक पोर्टेबल है bash
।
$BASH_VERSION
और$BASH_VERSINFO
चर को देखा है ?