আমি এমন একটি পরিবেশে কাজ করি যেখানে আমরা আস্তে আস্তে মেশিনগুলি রেড হ্যাট এন্টারপ্রাইজ লিনাক্স 5 থেকে আরএইচইএল 6 এ রূপান্তর করছি।
আরএইচইল 6 মেশিনে বর্তমানে আরএইচইএল 5 মেশিনে যা করা হচ্ছে তার থেকে আলাদাভাবে কিছু করার জন্য আমার কিছু স্ক্রিপ্ট দরকার need
ব্যবহারিক সমাধানটি রানটাইমের সময় যাচাই করা এবং RHEL5 এ কিছু কমান্ড চালানো, অন্যগুলি RHEL6 এ এবং কিছু উভয় ক্ষেত্রে চালানো।
এর ব্যবহারিক উদাহরণ হ'ল আমরা এনভায়রনমেন্ট মডিউলগুলি ব্যবহার করছি এবং আমার .bashrc
মধ্যে একটি module load git
লাইন রয়েছে , তবে আরএইচইএল 6 মেশিনে এই আদেশটি ত্রুটিযুক্ত:
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 {
...
}
এটি আমার যা করতে চাইবে তা মনে হচ্ছে তবে আমি আরও ছোট করার জন্য আশা করছিলাম।
সুতরাং, বাশ স্ক্রিপ্টে RHEL6 থেকে RHEL5 বলার সবচেয়ে সহজ উপায় কী?
আদর্শভাবে এটি বিভিন্ন প্রধান সংস্করণ জুড়ে মজবুত হওয়া উচিত, তবে ছোটখাট প্রকাশের সংখ্যায় পরিবর্তনের ক্ষেত্রে সহনশীল হওয়া উচিত।
git
বাশ মডিউলের প্রয়োজন হয়, আপনি এটি কল করার আগে এটি বিদ্যমান কিনা তা পরীক্ষা করে দেখুন। পরে / কখন এটি উপস্থিত হয়, আপনার চেকের ফলাফল পরিবর্তন হয়, তাই হঠাৎ কোনও অতিরিক্ত প্রচেষ্টা ছাড়াই বৈশিষ্ট্যটি কাজ শুরু করে।
lsb_release -r
এ অন্যান্য পাঠ্যও অন্তর্ভুক্ত রয়েছে, যেমন Release: 5.8
। যেমন ডেনিস কার্সেমেকার ব্যাখ্যা করেছেন যে আপনি যদি এর lsb_release -rs
পরিবর্তে ব্যবহার করেন তবে আপনি কেবল নম্বরটি পান।
lsb_release
কাজ করে? (-r
আপনাকে কেবলমাত্র নম্বর দেওয়া উচিত;-a
উপলভ্য সমস্ত কিছু দেখার জন্যও চেষ্টা করুন ) যদি তাই হয় তবে এটি ক্রস-বিক্রেতাও।