Я работаю в среде, где мы медленно переводим машины с 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
просмотреть все доступное) Если это так, то это также кросс-поставщик.