В общем случае вы не можете (или не должны) заменять команды по умолчанию вообще. Причина в том, что многие сценарии системного администрирования и сторонние пакеты, вероятно, полагаются на эти команды, чтобы вести себя так, как они делают из коробки на 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. Однако, чтобы не "переопределять" стандартные двоичные файлы OS 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 может быть непрактичным или невозможным без существенных изменений кода.