Из-за работы я недавно начал использовать OS X и настроил его с помощью homebrew, чтобы получить такой же опыт, как с Linux.
Тем не менее, есть довольно много различий в их настройках. Некоторые только должны быть на месте в одной системе. Поскольку мои точечные файлы находятся в репозитории git, мне было интересно, какой тип переключателя я мог бы установить, чтобы некоторые конфигурации читались только для системы Linux, а другие - для OS X.
Что касается точечных файлов, я имею в виду, среди прочего, .bash_profiles
или .bash_alias
.
if (exists rcfile.local); source rcfile.local; endif
переводу в соответствующий файл RC. Основной rc-файл, который я пытаюсь сохранить независимым от системы, в то время как.local
версия имеет системные настройки. Если вы хотите все это в одном репо, вы можете иметь системные директории и символическую ссылку на файл rcfile.local с тем, который находится в правильном каталоге.Ответы:
Держите точечные файлы как можно более переносимыми и избегайте зависящих от ОС настроек или переключателей, которые требуют определенной версии инструмента, например, избегайте синтаксиса GNU, если вы не используете программное обеспечение GNU во всех системах.
Вы, вероятно, столкнетесь с ситуациями, когда желательно использовать системные настройки. В этом случае используйте оператор switch с индивидуальными настройками:
Если для файлов конфигурации произвольных приложений требуются разные параметры, вы можете проверить, предоставляет ли приложение переключатели совместимости или другие механизмы. Для
vim
, например, вы можете проверить версию и поддержка для номера патчей имеется более старые версии или версии , скомпилированные с различным набором функций, не имеют. Пример фрагмента из.vimrc
:источник
uname -s
это какuname
. uname обозначает имя Unix.-s
?uname
один был каноническим способом сделать это в течение многих десятилетий и определен POSIX. Оригиналuname
(в PWB Unix) не выбрал ни одного варианта.-s
из этого ответа, и я буду помнить это для моих будущих сценариев.set
действительно ли эти кавычки в vimrc должны быть U + 201C и U + 201D, а не U + 0022?Если вас интересуют только файлы, которые на самом деле выполняются, такие как .bash_profiles и друзья, вы можете обойтись без использования, например,
uname
для дифференциации на основе системы, на которой работает код.Например , полностью непроверенный и с оговоркой, что у меня нет OS X, чтобы попробовать что-то, если у вас сейчас есть Linux:
и в Mac OS X:
(где
-x
заставляет OS Xls
делать то, что GNU ls делает по умолчанию), тогда их можно объединить в нечто вроде этого:Единственное требование - это то, что он
uname -s
работает в основном одинаково (так должно быть, поскольку обе системы разумно используют POSIX-y и uname -s требуется POSIX (спасибо Marco за это ), и что синтаксис для ветвления сценария оболочки на основе сравнения строк то же самое. Вы можете, вероятно, проверить на основе других критериев; Например, вы можете найти / etc / lsb_release, проверить, содержит ли / proc / sys / kernel / ostype «Linux», или какие-либо другие тесты, которые вы можете создать.источник
Darwin
, я только что проверил.-o
не является POSIX и не работает во многих системах, например в Solaris.-s
является обязательным для POSIX и наиболее совместимым способом. IEEE Std 1003.1OSTYPE
недоступен в оболочке POSIX. Сбой, например, при установке FreeBSD по умолчанию и может быть использован только в.bashrc
или.zshrc
. Она не работает надежно.profile
,.alias
и т.д. Так как мы говорим о здесь совместимости, я бы посоветовал пойти безопасный путь, вместо того , чтобы полагаться на особенности конкретного интерпретатора, которые не гарантированы будут доступны в каждой системе.