Saya bekerja di lingkungan di mana kami secara perlahan mentransisikan mesin dari Red Hat Enterprise Linux 5 ke RHEL 6.
Saya memerlukan beberapa skrip untuk melakukan sesuatu yang sedikit berbeda pada mesin RHEL6 dengan apa yang saat ini dilakukan pada mesin RHEL5.
Solusi pragmatis adalah memeriksa pada saat runtime dan menjalankan beberapa perintah di RHEL5, yang lain di RHEL6 dan beberapa di keduanya.
Contoh praktisnya adalah kita menggunakan modul lingkungan dan saya .bashrc
menyertakan module load git
baris, tetapi pada mesin RHEL6 kesalahan perintah ini:
RHEL6 system, git should be installed - not loading module
Mencari di modulefile saya menemukan kode berikut:
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 {
...
}
Ini tampaknya melakukan apa yang saya inginkan, tetapi saya berharap untuk sesuatu yang lebih pendek.
Jadi, apa cara termudah untuk memberi tahu RHEL5 dari RHEL6 dalam skrip bash?
Idealnya itu harus kuat di berbagai versi utama, tetapi toleran terhadap variasi dalam jumlah rilis kecil.
git
modul Bash, Anda memeriksa apakah ada sebelum memanggilnya. Ketika / jika muncul nanti, hasil cek Anda berubah, jadi tiba-tiba fitur mulai bekerja, tanpa usaha ekstra.
lsb_release -r
menyertakan teks lain, mis Release: 5.8
. Seperti yang dijelaskan Dennis Kaarsemaker , jika Anda menggunakannya lsb_release -rs
, Anda hanya mendapatkan nomornya.
lsb_release
bekerja? (-r
Seharusnya memberi Anda hanya nomor; coba juga-a
untuk melihat semua yang tersedia) Jika demikian, itu juga cross-vendor.