Red Hat Enterprise Linux 5'ten RHEL 6'ya makineleri yavaşça geçirdiğimiz bir ortamda çalışıyorum.
RHEL6 makinelerinde şu anda RHEL5 makinelerinde yapılanlardan farklı bir şeyler yapmak için bazı komut dosyalarına ihtiyacım var.
Pragmatik çözüm çalışma zamanında kontrol etmek ve RHEL5 üzerinde bazı komutlar, bazıları RHEL6 üzerinde ve bazılarında da komutlar çalıştırmaktır.
Bunun pratik bir örneği, ortam modülleri kullanmamızdır ve benim .bashrc
bir module load git
satır içerir , ancak RHEL6 makinelerinde bu komut hataları:
RHEL6 system, git should be installed - not loading module
Modulefile bakarak aşağıdaki kodu bulmak:
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 {
...
}
Bu istediğimi yapıyor gibi görünüyor, ama daha kısa bir şey umuyordum.
Peki, bir bash betiğinde RHEL6'dan RHEL5'e söylemenin en kolay yolu nedir?
İdeal olarak, farklı ana versiyonlarda sağlam olmalı, ancak küçük sürüm sayısındaki değişikliklere toleranslı olmalıdır.
git
Bash modülüne ihtiyacı varsa, onu çağırmadan önce var olup olmadığını kontrol edersiniz. Daha sonra göründüğünde / belirdiğinde, çekinizin sonuçları değişir, bu nedenle aniden ekstra çaba harcamadan özellik çalışmaya başlar.
lsb_release -r
başka metinler de vardır, örn Release: 5.8
. Dennis Kaarsemaker'ın açıkladığı gibi , lsb_release -rs
bunun yerine kullanırsanız, sadece sayıyı alırsınız.
lsb_release
işi? (-r
size sadece numarayı vermelidir;-a
mevcut her şeyi de görmeye çalışın ) Öyleyse, bu da çapraz satıcıdır.