Как я могу определить ОС в .bash_profile? [дубликат]

Создайте правило udev , используя гарантированный уникальный WWN диска (если он есть), в противном случае используйте объединенные идентификаторы поставщика и серийный ID:

  1. Получите требуемые значения:

     udevadm info -q all / dev /  | egrep "(WWN | SERIAL | VENDOR_ID) =" 
     
  2. Помассируйте эти значения в 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" 
     
  3. триггер udevadm

Для автоматического наименования символической ссылки с использованием значений, заданных udevadm info -q all / dev / , вы можете использовать:

SYMLINK+="disk-$env{ID_VENDOR}-$env{ID_SERIAL_SHORT}"

Также возможно создать переменные ENV из значений ATTRS , чтобы получить более короткий уникальный идентификатор.

6
05.07.2016, 08:27
3 ответа
if [[ $(uname -s) == Linux ]]
then
    doThis
else
    doThat
fi
10
27.01.2020, 20:20

В 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

Дополнительная литература:

11
27.01.2020, 20:20

В качестве альтернативного решения вы можете попробовать разделить свой .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 .

2
27.01.2020, 20:20

Теги

Похожие вопросы