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