Создайте правило udev
, используя гарантированный уникальный WWN диска (если он есть), в противном случае используйте объединенные идентификаторы поставщика и серийный ID:
Получите требуемые значения:
udevadm info -q all / dev / | egrep "(WWN | SERIAL | VENDOR_ID) ="
Помассируйте эти значения в udev
правила
, например:
ENV {DEVTYPE} == "disk", ENV {ID_WWN} == "0x5000c1cd31d48c87", SYMLINK + = "4TBseagate"
ENV {DEVTYPE} == "disk", ENV {ID_VENDOR_ID} == "0781", ENV {ID_SERIAL} == "SanDisk_Cruzer_Blade_4C530263101009 121490-0: 0", SYMLINK + = "8GBsandisk"
триггер udevadm
Для автоматического наименования символической ссылки с использованием значений, заданных udevadm info -q all / dev /
, вы можете использовать:
SYMLINK+="disk-$env{ID_VENDOR}-$env{ID_SERIAL_SHORT}"
Также возможно создать переменные ENV
из значений ATTRS
, чтобы получить более короткий уникальный идентификатор.
if [[ $(uname -s) == Linux ]]
then
doThis
else
doThat
fi
В OSX, uname -s
возвращает Darwin
(большинство программ Linux uname
возвращают Linux
).
Как правило (кроме личного использования), uname
имеет особенности для разных систем. В autoconf
сценарии используют config.guess
, который предоставляет согласованную информацию.
Например, в моем Debian 7,
x86_64-pc-linux-gnu
и OSX El Capitan
x86_64-apple-darwin15.5.0
Вы можете использовать операторы if-then-else в оболочке или оператор case. Последние легче поддерживать, например,
case $(config.guess) in
*linux*)
DoSomeLinuxStuff
;;
*apple-darwin*)
DoSomeMacStuff
;;
esac
Многие дистрибутивы Linux добавляют информацию к выходным данным uname
, но это полезно только в отдельных случаях. Не существует стандарта для добавленной информации.
Для моего Debian 7:
$ uname -v
#1 SMP Debian 3.2.81-1
в то время как OSX радикально отличается:
$ uname -v
Darwin Kernel Version 15.5.0: Tue Apr 19 18:36:36 PDT 2016; root:xnu-3248.50.21~8/RELEASE_X86_64
Дополнительная литература:
В качестве альтернативного решения вы можете попробовать разделить свой .bash_profile
на переносимую часть и часть, специфичную для системы.
В свой основной .bash_profile
добавьте следующее:
if [ -f ~/.bash_profile_local ] ; then
. ~/.bash_profile_local
fi
Затем поместите любые настройки, которые применяются только к данной системе, в .bash_profile_local
в этой системе. Если у вас нет настроек, вам не нужно создавать файл.
Или, если вы хотите пойти еще дальше и иметь общие части для одних систем, но не для других, вы можете создать полноценный каталог rc.d в стиле SYSV. В .bash_profile
:
if [ -d ~/.bash_profile.d ] ; then
for f in ~/.bash_profile.d/* ; do
if [ -f "$f" ] ; then
. "$f"
fi
done
fi
Затем создайте каталог .bash_profile.d
, и все файлы, которые вы туда поместите, будут запускаться, как если бы они были частью вашего .bash_profile
.