
Команды, доступные по умолчанию в Терминале в OS X, похоже, ведут себя не так, как их версии в Linux. Как заменить их все на реальные команды GNU Linux?
Например, sed -i требует раздражающе дополнительный аргумент "". Кроме того, он работает только с текстовыми файлами. Это бесполезно.
решение1
В общем случае вы не можете (илине следует) вообще не заменяют команды по умолчанию. Причина в том, что многие скрипты системного администрирования и сторонние пакеты, вероятно, полагаются на эти команды, чтобы вести себя так, как они ведут себя из коробки в OS X.
Так что если вы просто удалите системные команды и замените их эквивалентами GNU, которые имеют несовместимое поведение или аргументы командной строки, это, вероятно, что-то сломает. Особенно если вы используете какое-то программное обеспечение, которое было «перенесено» на Mac OS X после того, как изначально было разработано для работы на Linux или BSD, поскольку такие типы программ, скорее всего, будут полагаться на скрипты оболочки и системные команды, а не на вызов API OS X.
Что тыможетсделать, это установить среду, которая устанавливает утилиты GNU в другой каталог, не перезаписывая значения по умолчанию, а затемнастройте PATH
переменную окружениятак что он отдает приоритет командам, найденным в каталоге GNU, прежде чем он даже начнет искать в системных каталогах. Вы можете подключить это так, чтобы он устанавливал ваш PATH таким образом, только если вы запускаете интерактивную оболочку; вы можете погуглить, как это сделать, bash
или задать другой вопрос на SU (или поискать его, так как он, вероятно, уже задавался), если вы хотите это сделать.
Примером такой среды являетсяДомашнее пивокоторый, например, имеет 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, совместимость с системными вызовами и т. д.), вам придется запустить Linux на виртуальной машине, напримерVirtualBox. Это надежный вариант, если вам нужно запустить программное обеспечение или скрипты, предназначенные для работы в Linux.
Homebrew обеспечит вам совместимость только с определенными классами программ, которым не требуется специфическое для Linux поведение. Например, inotify
доступен только в Linux. drm
(Direct Rendering Manager) доступен только в Linux. Существуют некоторые другие довольно низкоуровневые системные вызовы, которые доступны только в Linux и для которых нет эквивалента в OS X, поэтому перенос определенных программ из Linux в OS X может быть непрактичным или невозможным без существенных изменений кода.
решение2
Вы могли бы использоватьПрефикс Gentooкоторый поддерживает OS X, вы можете сделать это с помощьюсамонастройка егои затем добавить соответствующие пути в каталоге префиксов в ваш PATH. Возможно, это уже делает это для вас. После того, как вы это сделаете, вы можете использовать стандартные команды Gentoo для установки пакетов.
emerge coreutils
Например, вы получите стандартные утилиты GNU.
Обратите внимание, что Gentoo компилируется по умолчанию, возможно, вам захочетсянастроить бинарный хостВместо этого. Это просто использование одного из URL-адресов во второй половине статьи и размещение его PORTAGE_BINHOST="... your url here ..."
в ./etc/make.conf
вашем префиксе.
решение3
В продолжение поста @allquixotic, вот официальные инструкцииbrew install coreutils
Все команды установлены с префиксом «g».
Если вам действительно нужно использовать эти команды под их обычными именами, вы можете добавить каталог «gnubin» в PATH из bashrc, например:
PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"
Кроме того, вы можете получить доступ к их страницам руководства с обычными именами в каталоге "gnuman" вашего MANPATH из вашего bashrc.
MANPATH="/usr/local/opt/coreutils/libexec/gnuman:$MANPATH"