6

У меня есть довольно обширный выбор файлов точек, которые долгое время хранились в git-репо - я просто поддерживаю отдельную ветвь кода для bsd-isms (например, в Linux, чтобы получить цветной вывод ls, который вы делаете ls --color=auto , но на BSD-лайках, включая Mac OS, это ls -g).

Это стало громоздким, так как мне приходится вносить изменения, затем объединять ветви и заниматься разрешением конфликтов каждый раз, когда я прикасаюсь к файлу rc своей оболочки. Представьте, что правильным способом справиться с этим будет удаление git-ветвления и просто сделать так, чтобы мой rc-файл определил, на какой ОС он работает, а затем поставил соответствующий аддон-скрипт для псевдонимов.

Проблема в том, что я понятия не имею, как это сделать.

Как мне узнать, нахожусь ли я в Linux или BSD из rc-файла скрипта или оболочки?

uname не будет работать с тех пор, я должен написать кучу логики для различных систем. Mac говорит Darwin, FreeBSD и т.д., Когда меня больше интересует базовый тип ОС, поскольку это повлияет на конкретный набор инструментов, с которыми я имею дело. Для моего примера выше, я использую bsd ls или GNU ls?

2 ответа2

10

Этот ответ переполнения стека Николасом Мартьяновым предлагает полное решение. Я настроил его, чтобы использовать более новый синтаксис, упомянутый в комментариях.

Определите ОС:

platform='unknown'
unamestr=$(uname)
if [ "$unamestr" = 'Linux' ]; then
   platform='linux'
elif [ "$unamestr" = 'FreeBSD' ]; then
   platform='freebsd'
fi

Выберите правильные флаги для ls:

if [ "$platform" = 'linux' ]; then

   alias ls='ls --color=auto'

elif [ "$platform" = 'freebsd' ]; then

   alias ls='ls -G'

fi
0

Оставляя в стороне обнаружение платформы (правильно сделанное через uname), нужно правильно выбирать не только флаги, но и путь к исполняемому файлу.

Вызов только ls -G означает, что я получу любой псевдоним /function / executetable-found-in- $ PATH и запустим его с флагом -G . Этот псевдоним / функция / исполняемый файл может быть или не быть BSD в ОС BDS, может или не может следовать аргументам BDS, может быть или не быть той же самой версией, которую вы ожидали, и т.д.

По этой причине можно использовать полный путь к встроенному исполняемому файлу, который имеет действительно высокий шанс (скрипка с системным уровнем не так распространена, как игра с псевдонимами /functions /$ PATH) следующих ОС: /bin/ls -G .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .