Я працюю в середовищі, коли ми повільно переходимо на машини з Red Hat Enterprise Linux 5 на RHEL 6.
Мені потрібні декілька моїх сценаріїв, щоб зробити щось тонко відмінне на машинах RHEL6 від того, що зараз робиться на машинах RHEL5.
Прагматичне рішення полягає в тому, щоб перевірити час виконання та запустити деякі команди на RHEL5, інші на RHEL6 та деякі з обох.
Практичним прикладом цього є те, що ми використовуємо модулі середовища, і мій .bashrc
включає module load git
рядок, але на машинах RHEL6 ця команда помилки:
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 {
...
}
Це, здається, робить те, що я хочу, але я сподівався на щось коротше.
Отже, який найпростіший спосіб сказати RHEL5 від RHEL6 у сценарії bash?
В ідеалі він повинен бути надійним для різних основних версій, але бути толерантним до змін незначної кількості релізів.
git
модуль Bash, ви перевіряєте, чи існує він, перш ніж викликати його. Коли / якщо вона з’явиться пізніше, результати вашої перевірки змінюються, тому раптом функція почне працювати без зайвих зусиль.
lsb_release -r
входить інший текст, наприклад Release: 5.8
. Як пояснює Денніс Каарсемейкер , якщо ви скористаєтесь lsb_release -rs
натомість, ви отримаєте просто число.
lsb_release
роботу? (-r
слід вказати лише номер; спробуйте також-a
переглянути все, що є в наявності) Якщо це так, це також перехресний постачальник.