В общем случае вы не можете (или не должны ) заменять команды по умолчанию вообще. Причина в том, что многие сценарии системного администрирования и сторонние пакеты, вероятно, полагаются на эти команды, чтобы вести себя так, как они делают из коробки на OS X.
Поэтому, если вы просто уничтожите системные команды и замените их эквивалентами GNU, которые имеют несовместимое поведение или аргументы командной строки, это, вероятно, что-то сломает. Особенно, если вы используете какое-то программное обеспечение, которое было «перенесено» на Mac OS X после того, как оно изначально было разработано для работы в Linux или BSD, так как эти типы программ более склонны полагаться на сценарии оболочки и системные команды, а не на вызов API OS X.
Что вы можете сделать, это установить среду, в которой утилиты GNU устанавливаются в другой каталог, не перезаписывая значения по умолчанию, а затем настроить PATH
переменную среды так, чтобы она отдавала приоритет командам, находящимся в каталоге GNU, еще до того, как она произведет поиск в системных каталогах. Вы можете подключить это так, чтобы он устанавливал ваш путь только таким образом, если вы запускаете интерактивную оболочку; Вы можете узнать, как это сделать, bash
или задать другой вопрос по SU (или выполнить поиск, поскольку он, вероятно, задавался раньше), если хотите это сделать.
Примером такой среды является Homebrew, который, например, имеет GNU sed
. После того, как вы установили Homebrew, вы можете набрать
brew install coreutils
и установите GNU Coreutils . Это обеспечит вам sed
, date
, printf
, wc
и многие другие инструменты , которые поставляются с GNU / Linux, но не OS X. Тем не менее, чтобы не «отменяют» ОС по умолчанию X двоичные файлы, они будут с префиксом g
по умолчанию. Итак, после установки Coreutils, если вы хотите использовать GNU sed, введите
gsed
Если каждый раз вводить слишком много хлопот, вы можете добавить каталог «gnubin» в PATH и просто вызвать GNU sed с помощью sed
. Вам нужно будет добавить следующее к вашему ~/.bash_profile
:
PATH="$(brew --prefix coreutils)/libexec/gnubin:$PATH"
Конечно, если вам нужна среда Linux от супа до чокнутого (ядро, X11, совместимость с syscall и т. Д.), Вам придется запускать Linux на виртуальной машине, такой как VirtualBox . Это безопасная ставка, если вам нужно запустить программное обеспечение или сценарии, предназначенные для работы в Linux.
Homebrew предоставит вам совместимость только с определенными классами программ, которые не требуют специфического поведения Linux. Например, inotify
доступно только в Linux. drm
(Direct Rendering Manager) доступен только в Linux. Существуют некоторые другие довольно низкоуровневые системные вызовы, которые доступны только в Linux и для которых нет эквивалента в OS X, поэтому перенос некоторых программ из Linux в OS X может быть непрактичным или невозможным без значительных изменений кода.