Вплоть до этого месяца мои конфиги оболочки были довольно просты (в основном с псевдонимами .bashrc
или .bash_profile
с некоторыми псевдонимами), но я проводил рефакторинг, чтобы я мог получить различное поведение в зависимости от того, использую ли я zsh и bash. Сначала они получают общий конфигурационный файл оболочки, который должен работать для чего угодно, а затем специализируются на конкретной используемой оболочке (см. Ссылку на это).
Я был удивлен сегодня, когда ls
перестал работать. Оказалось, что во время рефакторинга .bashrc
был псевдоним
alias ls='ls --color=always'
это сломало вещи ls
в bash на терминале в OSX. Как только я увидел, что BSD ls
любит -G
цвет, а GNU (или что-то еще в Ubuntu) нравится --color
, стало ясно, что довольно много вариантов различаются.
Мой вопрос заключается в том, каков наилучший способ учета различий в параметрах и таковых между BSD и GNU coreutils? Должен ли я проверить переменную env в if
блоках, чтобы увидеть, какая ОС используется и применить правильное поведение? Или имеет смысл создавать отдельные конфигурационные файлы для каждой ОС?
Хотя ответы на эти вопросы могут быть субъективными, это выглядит как краткое изложение различий между базовыми утилитами BSD и GNU, и стратегии, позволяющие обойти их для создания универсальной конфигурации, пригодной для использования на большинстве * nix, были бы довольно объективными.
ls -c
отличается отls --color
. Отредактировал ваш вопрос, чтобы исправить.