আপনি .sh (বাশ) স্ক্রিপ্টে কোনও সিস্টেমে উবুন্টুর সংস্করণটি কীভাবে বলতে পারেন?


9

সুতরাং আমি একটি বাশ / এক্সিকিউটেবল তৈরি করার চেষ্টা করছি এবং এটিতে আমার সিস্টেমে উবুন্টুর সংস্করণ সংখ্যাটি জানতে হবে। আমি অনলাইনে যেভাবে খুঁজে পেয়েছি সেগুলি নিয়ে গঠিত lsb_release -r, তবে আমি এটিকে কোনও চলকতে আউটপুট করতে পারি না।

উবুন্টুর বর্তমান সংস্করণটি পাওয়ার এবং শেল এক্সিকিউটেবলের মধ্যে একটি ভেরিয়েবল হিসাবে সংরক্ষণ করার কোনও উপায় আছে কি?


হ্যাঁ, আমি এটির প্রশংসা করি। দুঃখিত, আমি জানতাম না যে এই বিষয়ে নথি আছে। আমি এটিকে
যেভাবেই

হ্যাঁ, আমি এটা করেছি। ধন্যবাদ
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। তবে কি কেবল নাম্বার পাওয়ার উপায় আছে? আমি স্ক্রিপ্টের একটি / অন্য ক্রিয়ায় এই পরিবর্তনশীলটি ব্যবহার করতে সক্ষম হতে চাই। যদি / অন্যটির উদ্দেশ্য হ'ল উবুন্টুর ডিসট্রোর জন্য আমার অ্যাপ্লিকেশনটির সঠিক সংস্করণটি ডাউনলোড করা।
a.mosallaei

আহ কিছু নয়। @ user68186 আমার সমস্যার সমাধান করেছে। তোমাদেরকে অনেক ধন্যবাদ বন্ধু!
a.mosallaei

আমি উত্তর লিখতে যাচ্ছিলাম কিন্তু আপনি আমাকে এটি মারলেন! :-) আমি অবদান খুশি।
ব্যবহারকারী 68186

4
@ এ.মোসলেই সাবধানতার একটি শব্দ - যদি আপনি কেবল সংখ্যা অংশটি ব্যবহার করেন এবং অন্য সব কিছু উপেক্ষা করেন তবে এই স্ক্রিপ্টটির কোনও উবুন্টু মেশিনে অজানা ফলাফল হতে চলেছে (উবুন্টু ভিত্তিক অনেকগুলি বিতরণ যা উবুন্টু "সামঞ্জস্যপূর্ণ" তবে তাদের নিজস্ব নাম এবং সংস্করণ রয়েছে); lsb_re দয়া করে নম্বরটি ব্যবহারের আগে "উবুন্টু" দিয়ে ফলাফল শুরু হয় কিনা তা যাচাই করার দরকার হতে পারে।
পিটারিস

1
@ a.mosallaei আপনি বলেছেন যে আপনার এক্সিকিউটেবল কেবল উবুন্টু কম্পিউটারে ব্যবহৃত হবে। আপনি সেটা কিভাবে জানেন? ডিসট্রো যদি উবুন্টু না হয় তবে একটি ফেইলসেফ থাকা ভাল। আমাকে বিশ্বাস করুন, ব্যবহারকারীরা আপনার প্রোগ্রামটি ক্রাশ করার চেষ্টা করবে।
ক্রিটফ প্যাটেক

11

/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 = "সিলেভিয়া" পেয়েছি)। যদিও, UBUNTU_CODENAME সঠিক হওয়া উচিত।
রজার লিপসক্বে

সাবশেল এটি করার সবচেয়ে মজাদার উপায়, তাই না?
জেমস দ্য আশ্চর্যডুড

পছন্দ করেছেন
টেরডন

8

lsb_releaseকমান্ড একটি সমর্থন -s(অথবা --short) বিকল্প শুধু তথ্য আপনার জন্য অনুরোধ এবং হেডার যে কোন তথ্য ধরনের বলে প্রিন্ট করতে।

কেবলমাত্র সংস্করণ নম্বর পেতে এটি চালানো যথেষ্ট:

lsb_release -sr

উদাহরণস্বরূপ, উবুন্টু 18.04 এলটিএস-এ, ফলাফলগুলি:

18.04

উইনউইউচস ২ ইউনিক্সের উত্তরের পদ্ধতির মতো , শেল ভেরিয়েবলের জন্য এই আউটপুট নির্ধারণের জন্য কমান্ড প্রতিস্থাপন ব্যবহার করা যুক্তিসঙ্গত । মনে করুন আপনি verভেরিয়েবলটি প্রকাশের নম্বরটি ধরে রাখতে চেয়েছিলেন :

ver="$(lsb_release -sr)"

সঙ্গে -sসঙ্গে নম্বর আউট বিশ্লেষণ করতে দরকার নেই cut, sed, grep, awk, জটিলতর রূপের প্যারামিটার সম্প্রসারণ , বা মত।

এই ব্যবহারে, " "উদ্ধৃতিগুলি al চ্ছিক, তবে আমি সাধারণত প্যারামিটার সম্প্রসারণ এবং অন্যান্য শেল বিস্তৃতি উদ্ধৃত করার পরামর্শ দিই না হয় যখন কারণ না থাকে except


হ্যাঁ, আপনাকে ধন্যবাদ! আমি কখনই বুঝতে পারি নি তবে আপনি এটি পুরোপুরি ব্যাখ্যা করেছেন! প্রশংসা
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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.