आप .sh (bash) स्क्रिप्ट में सिस्टम पर Ubuntu के संस्करण को कैसे बता सकते हैं?


8

इसलिए मैं एक बैश / निष्पादन योग्य बनाने की कोशिश कर रहा हूं, और मुझे सिस्टम पर उबंटू की संस्करण संख्या जानने की आवश्यकता है। सभी तरीकों से मुझे ऑनलाइन मिला है lsb_release -r, हालांकि मैं इसे एक चर में आउटपुट नहीं कर सकता।

क्या उबंटू के वर्तमान संस्करण को प्राप्त करने और शेल निष्पादन योग्य में एक चर के रूप में सहेजने का कोई तरीका है?


हां, मैं इसकी सराहना करता हूं। क्षमा करें, मुझे नहीं पता था कि इस पर प्रलेखन था। मैं इसे किसी भी तरह से सराहना करता हूं
a.mosallaei

हां, मैंने किया है। धन्यवाद
a.mosallaei

जवाबों:


21
Var=$(lsb_release -r)
echo "$Var"

चाल चलनी चाहिए।

संख्यात्मक भाग के लिए केवल इसे जोड़ें:

NumOnly=$(cut -f2 <<< "$Var")
echo "$NumOnly"

lsb-releaseचर फ़ाइल

/usr/bin/lsb_releaseपायथन लिपि है। यह एक छोटी स्क्रिप्ट है जो अजगर भाषा के अच्छे परिचय के रूप में कार्य करती है। जैसा कि दूसरों ने उल्लेख किया है, केवल संस्करण संख्या प्राप्त करने का एक छोटा तरीका है lsb_release -sr

/etc/lsb-releaseफ़ाइल द्वारा प्रदान की उसी जानकारी के साथ पर्यावरण चर को परिभाषित करता है lsb_release -aआदेश:

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.6 LTS"

आप इन पर्यावरण चर को कभी भी उपयोग करके शामिल कर सकते हैं . /etc/lsb-release। अपने टर्मिनल में परीक्षण करने के लिए:

$ . /etc/lsb-release

$ echo $DISTRIB_RELEASE
16.04

$ echo $DISTRIB_DESCRIPTION
Ubuntu 16.04.6 LTS

हां, धन्यवाद, यह काम करता है, यह आउटपुट करता है Release: 18.04। हालांकि क्या सिर्फ नंबर पाने का एक तरीका है? मैं स्क्रिप्ट में if / else फ़ंक्शन में इस चर का उपयोग करने में सक्षम होना चाहता हूं। Ubuntu के distro के लिए मेरे आवेदन के सही संस्करण को डाउनलोड करना / करना है, तो इसका उद्देश्य है।
a.mosallaei

आह बुरा न मानें। @ user68186 ने मेरी समस्या हल कर दी। मित्रों, आप सबको बहुत - बहुत धन्यवाद!
a.mosallaei

मैं जवाब लिखने जा रहा था लेकिन आपने मुझे हरा दिया! :-) मुझे योगदान देने में खुशी हो रही है।
user68186

4
@ a.mosallaei सावधानी का एक शब्द है - यदि आप केवल संख्या भाग का उपयोग कर रहे हैं और बाकी सब कुछ अनदेखा कर रहे हैं, तो इस स्क्रिप्ट में किसी भी गैर-उबंटू मशीन पर अजीब परिणाम होने वाले हैं (कई उबंटू-आधारित वितरण जो उबंटू "संगत" हैं) लेकिन उनके अपने नाम और संस्करण हैं); यदि संख्या का उपयोग करने से पहले lsb_release परिणाम "Ubuntu" से शुरू होता है, तो आपको सत्यापित करने की आवश्यकता हो सकती है।
Peteris

1
@ a.mosallaei आप कहते हैं कि आपके निष्पादन योग्य का उपयोग केवल उबंटू कंप्यूटर पर किया जाएगा। तुम्हें कैसे पता? फेलसेफ होना बेहतर है जो डिस्ट्रो उबंटू नहीं है। मेरा विश्वास करो, उपयोगकर्ता आपके प्रोग्राम को क्रैश करने का प्रयास करेंगे।
Kryštof Píštěk

10

/etc/os-releaseइसके बजाय फ़ाइल का उपयोग करने के लिए एक विकल्प है । इसे शेल चरों की सूची के रूप में स्वरूपित किया गया है:

$ cat /etc/os-release 
NAME="Ubuntu"
VERSION="18.04.2 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.2 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic

तो इसे sourceफ़ाइल करने का एक आसान तरीका है :

$ . /etc/os-release

$ echo $NAME
Ubuntu

$ echo $VERSION
18.04.2 LTS (Bionic Beaver)

$ echo $PRETTY_NAME
Ubuntu 18.04.2 LTS


$ echo $VERSION_ID
18.04

इन सभी चरों को अनावश्यक रूप से सेट करने से बचने के लिए, आप फ़ाइल को एक सबशेल में स्रोत कर सकते हैं , उस चर की प्रतिध्वनि करें, जिसकी आपको ज़रूरत है और सदस्यता से बाहर निकलें:

$ ( . /etc/os-release ; echo $VERSION_ID)
18.04

वैकल्पिक रूप से, आप हमेशा फ़ाइल को सीधे पार्स कर सकते हैं:

$ grep -oP 'VERSION_ID="\K[\d.]+' /etc/os-release 
18.04

1
ध्यान दें कि उबंटू डेरिवेटिव के लिए, संस्करण की जानकारी डाउनस्ट्रीम संस्करण को संदर्भित कर सकती है (जैसे मैंने अपने मिंट बॉक्स के लिए VERSION_ID = "18.3" और VERSION_CODENAME = "sylvia")। UBUNTU_CODENAME सही, हालाँकि होना चाहिए।
रोजर लिप्सकॉम्ब

सबसे अच्छा तरीका यह है, ठीक है?
JamesTheAwesomeDude

@JamesTheAwesomeDude शायद, हाँ।
terdon

8

lsb_releaseआदेश एक का समर्थन करता है -s(या --short) विकल्प सिर्फ जानकारी आप के लिए पूछ सकते हैं और नहीं हैडर कि है कि किस तरह की जानकारी का कहना है मुद्रित करने के लिए।

केवल संस्करण संख्या प्राप्त करने के लिए यह इस प्रकार चलाने के लिए पर्याप्त है:

lsb_release -sr

उदाहरण के लिए, Ubuntu 18.04 LTS पर, यह आउटपुट:

18.04

WinEunuuchs2Unix के उत्तर में विधि के साथ , इस आउटपुट को शेल चर में असाइन करने के लिए कमांड प्रतिस्थापन का उपयोग करना अभी भी उचित है । मान लें कि आप चाहते थे कि verचर संख्या जारी करे:

ver="$(lsb_release -sr)"

साथ -s, साथ नंबर पार्स आउट कर कोई आवश्यकता नहीं है cut, sed, grep, awk, के और अधिक जटिल रूपों पैरामीटर विस्तार , या की तरह।

इस उपयोग में, " "उद्धरण वैकल्पिक हैं, लेकिन मैं आमतौर पर पैरामीटर विस्तार और अन्य शेल विस्तार को उद्धृत करने का सुझाव देता हूं, जब कोई कारण नहीं है।


हाँ धन्यवाद! मैं -s को कभी नहीं समझ पाया, लेकिन आपने इसे पूरी तरह से समझाया! सराहना
a.mosallaei

5

छोटी और सरल lsb_releaseआज्ञा।

  • केवल संस्करण मुद्रित करने के लिए

    lsb_release -sr

    आउटपुट:

    18.04
  • विवरण मुद्रित करने के लिए

    lsb_release -sd

    आउटपुट:

    Ubuntu 18.04.2 LTS

यहां इस्तेमाल किए गए झंडे के बारे में:

-s   show requested information in short format
-r   show release number of this distribution
-d   show description of this distribution
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.