Я пытаюсь разработать совместимость в моей конфигурации оболочки между * nix и macos. Различные скрипты и конфигурации, которые я использую, зависят от утилит gnu и предполагают, что они находятся в PATH. Для этого я установил множество инструментов командной строки GNU с помощью homebrew и переключателя --with-default-names
, где это возможно и целесообразно.
Однако пакеты binutils и coreutils не поставляются с переключателем --with-default-names
в формуле homebrew. Для достижения паритета в интерактивной оболочке я могу просто создать псевдонимы, например alias dircolors='gdircolors'
. Однако сценарий выполняется в подоболочке и, следовательно, не наследует псевдонимы, поэтому dircolors
завершится ошибкой. Тестирование на наличие зависимости также не работает, так как в случае chown
будет использоваться встроенный пакет (и произойдет сбой, если я использую функции, которых нет в дистрибутиве macos).
На данный момент я рассматриваю возможность создания пакета сценариев оболочки, который проверяет наличие версии утилиты gnu и выполняет ее, если она найдена, и помещает их в переменную PATH следующим образом:
$ cat chmod
if command -v gchmod > /dev/null 2> /dev/null ; then
gchmod "$@"
else
chmod "$@"
fi
Это кажется ужасно громоздким, и я бы предпочел избежать этого, если это возможно.
Помимо сборки binutils и coreutils, какие еще решения возможны?