Дотфайлы для bash 3.x+
Пару недель назад посетило меня вдохновение переписать свой комплект дотфайлов таким образом, чтобы он нормально работал в разных unix системах. По работе приходится использовать FreeeBSD, HP-UX, AIX, Fedora, RHEL да еще и под разные платформы (x86, x86-64, ia64, ppc), серверов много, так что еще одной задачей, кроме оптимизации, был вывод версии ОС, архитектуры и, желательно, названия дистрибутива для linux’ов.
Вывод названия дистрибутива для linux – задача нетривиальная. Многие linux’ы имеют в поставке утилиту lsb_release, которая все чудно показывает, но многие не имеют… Другой метод
cat /proc/version
тоже не подходит, т.к., например Fedora о себе сообщает примерно следующее:
Linux version 2.6.27.15-170.2.24.fc10.i686 (mockbuild@x86-5.fedora.phx.redhat.com) (gcc version 4.3.2 20081105 (Red Hat 4.3.2-7) (GCC) ) #1 SMP Wed Feb 11 23:58:12 EST 2009
что правильно, но поставленной задачи не решает, т.к. не видно что это Fedora. Кстати, на Fedora можно поставить пакет redhat-lsb и в ней появится утилита lsb_release.
Есть еще метод
cat /etc/*-release
который сложно автоматизировать, т.к. в некоторых linux’ах таких файлов несколько, причем некоторые из них симлинки…
В результате я поступил следующим образом:
if [ -x /usr/bin/lsb_release ]; then
OSName=`/usr/bin/lsb_release -ds |tr -d '"'`
else
OSName=`find /etc/*-release -type f -exec cat {} \; 2>/dev/null || uname -sr`
fi
что на обычном языке означает – если есть утилита lsb_release, то берем ее вывод, иначе пытаемся вывести версию ОС из файла /etc/*-release, игнорируя симлинки и если таких файлов нет, то используем вывод команды uname.
Вот что получается в итоге:
FreeBSD
FreeBSD 7.0-STABLE, i386
Linux с lsb_release
Ubuntu 9.04, x86_64
Red Hat Enterprise Linux Server release 5.4 (Tikanga), ppc64
Linux без lsb_release
Fedora release 12 (Constantine), x86_64
HP-UX
HP-UX B.11.23, ia64
Желающие могут скачать мои дотфайлы:
.bash_profile, v1.2, 1.55 KB - скачано 124 раз.
.bashrc, v1.2, 1.39 KB - скачано 149 раз.
Комментарии