Как определить ОС и загрузить настройки ZSH условно? - PullRequest
0 голосов
/ 09 февраля 2019

Я использую несколько разных ОС дома и на работе, и я хочу иметь возможность условно загружать специфичные для platorm настройки ZSH, в зависимости от того, какую ОС я использую в данный момент.

Я пробовал это, ноон загружает не все, что я ожидаю:

# Condtitional loading of zsh settings per platform

if command apt > /dev/null; then
    source $ZSH_CUSTOM/os/debian.zsh

elif command systemctl > /dev/null; then
    source $ZSH_CUSTOM/os/systemd.zsh

elif command freebsd-version > /dev/null; then
    source $ZSH_CUSTOM/os/freebsd.zsh

elif [[ `uname` == "Darwin" ]]; then
    source $ZSH_CUSTOM/os/mac.zsh

elif command kubectl > /dev/null; then
    source $ZSH_CUSTOM/os/kubernetes.zsh

else
    echo 'Unknown OS!'
fi

Каков наилучший способ сделать это обнаружение и что я делаю неправильно?Я знаю, что мой подход не работает, так как когда я запускаю zsh -o SOURCE_TRACE, он не показывает все нужные исходные файлы.

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 10 февраля 2019

Я ответил на тот же вопрос о Reddit здесь , поэтому, чтобы закрыть цикл, вот что я написал:

Ваша текущая логика буквально говорит, что, например, система Debian не можетвозможно запустить systemd или Kubernetes, что явно не соответствует действительности.Это именно то, что if...elif...else...fi реализует: взаимная исключительность .

Мне кажется, что только специфичные для ОС тесты должны быть взаимоисключающими, поэтому вы, вероятно, смотрите на что-то вроде:

# What OS are we running?
if command apt > /dev/null; then
    source $ZSH_CUSTOM/os/debian.zsh

elif command freebsd-version > /dev/null; then
    source $ZSH_CUSTOM/os/freebsd.zsh

elif [[ `uname` == "Darwin" ]]; then
    source $ZSH_CUSTOM/os/mac.zsh

else
    echo 'Unknown OS!'
fi

# Do we have systemd on board?
if command systemctl > /dev/null; then
    source $ZSH_CUSTOM/os/systemd.zsh
fi

# Ditto Kubernetes?
if command kubectl > /dev/null; then
    source $ZSH_CUSTOM/os/kubernetes.zsh
fi
0 голосов
/ 09 февраля 2019

Проверка ОС зависит от системы.Вы можете использовать менеджеры пакетов для проверки определенного дистрибутива, но это нежелательно, поскольку, безусловно, существуют и другие дистрибутивы, к которым относится тот же менеджер пакетов.

Вы можете попробовать использовать lsb_release иgrep о правильном распределении.Или используйте uname .

Какие операционные системы не загружаются в ваш скрипт, а какие загружаются?

Кроме того, посмотрите здесь

...