Команды, доступные по умолчанию в Терминале в OS X, похоже, ведут себя не так, как их версии для Linux. Как я могу заменить их все действующими командами GNU linux?
Например, sed -i требует раздражающе дополнительного аргумента "". Кроме того, он работает только с текстовыми файлами. Это бесполезно.
linux
macos
command-line
terminal.app
linux-terminal
Тот самый
источник
источник
-i
флаг нестандартный .ed
для редактирования файлов.Ответы:
В общем случае вы не можете (или не должны ) заменять команды по умолчанию вообще. Причина в том, что многие сценарии системного администрирования и сторонние пакеты, вероятно, полагаются на эти команды, чтобы вести себя так, как они делают из коробки на OS X.
Поэтому, если вы просто уничтожите системные команды и замените их эквивалентами GNU, которые имеют несовместимое поведение или аргументы командной строки, это, вероятно, что-то сломает. Особенно, если вы используете какое-то программное обеспечение, которое было «перенесено» на Mac OS X после того, как оно изначально было разработано для работы в Linux или BSD, так как эти типы программ более склонны полагаться на сценарии оболочки и системные команды, а не на вызов API OS X.
Что вы можете сделать, это установить среду, в которой утилиты GNU устанавливаются в другой каталог, не перезаписывая значения по умолчанию, а затем настроить
PATH
переменную среды так, чтобы она отдавала приоритет командам, находящимся в каталоге GNU, еще до того, как она произведет поиск в системных каталогах. Вы можете подключить это так, чтобы он устанавливал ваш путь только таким образом, если вы запускаете интерактивную оболочку; Вы можете узнать, как это сделать,bash
или задать другой вопрос по SU (или выполнить поиск, поскольку он, вероятно, задавался раньше), если хотите это сделать.Примером такой среды является Homebrew, который, например, имеет GNU
sed
. После того, как вы установили Homebrew, вы можете набратьи установите GNU Coreutils . Это обеспечит вам
sed
,date
,printf
,wc
и многие другие инструменты , которые поставляются с GNU / Linux, но не OS X. Тем не менее, чтобы не «отменяют» ОС по умолчанию X двоичные файлы, они будут с префиксомg
по умолчанию. Итак, после установки Coreutils, если вы хотите использовать GNU sed, введитеЕсли каждый раз вводить слишком много хлопот, вы можете добавить каталог «gnubin» в PATH и просто вызвать GNU sed с помощью
sed
. Вам нужно будет добавить следующее к вашему~/.bash_profile
:Конечно, если вам нужна среда Linux от супа до чокнутого (ядро, X11, совместимость с syscall и т. Д.), Вам придется запускать Linux на виртуальной машине, такой как VirtualBox . Это безопасная ставка, если вам нужно запустить программное обеспечение или сценарии, предназначенные для работы в Linux.
Homebrew предоставит вам совместимость только с определенными классами программ, которые не требуют специфического поведения Linux. Например,
inotify
доступно только в Linux.drm
(Direct Rendering Manager) доступен только в Linux. Существуют некоторые другие довольно низкоуровневые системные вызовы, которые доступны только в Linux и для которых нет эквивалента в OS X, поэтому перенос некоторых программ из Linux в OS X может быть непрактичным или невозможным без значительных изменений кода.источник
brew install coreutils
не входитsed
. Вы можете сделатьbrew install gnu-sed
однако это количество установок ,gsed
а неsed
, даже если вы обновите$PATH
. Я создал символическую ссылку, чтобы скрыть Macsed
:ln -s $(which gsed) $(brew --prefix coreutils)/libexec/gnubin/sed
однако вам все еще нужно сделать,man gsed
чтобы увидеть правильную страницу руководства.brew install gnu-sed --default-names
установит это какsed
--default-names
вы можете установить с помощью команд с префиксом g, а затем установить oh-my-zsh (настоятельно рекомендуется) и включить плагин gnu-utils.Вы можете использовать префикс Gentoo, который поддерживает OS X, вы можете сделать это, загрузив его и добавив соответствующие пути в каталоге префиксов в вашу переменную PATH. Возможно, это уже делает это для вас. После этого вы можете использовать стандартные команды Gentoo для установки пакетов.
emerge coreutils
Например, вы получите стандартные утилиты GNU.Обратите внимание, что Gentoo компилируется по умолчанию, вместо этого вы можете настроить двоичный хост . Это только с помощью одного из URL - адресов на второй половине этой статьи, и поместить его в
PORTAGE_BINHOST="... your url here ..."
в./etc/make.conf
вашей приставкой.источник
Как продолжение сообщения @ allquixotic, здесь приведены официальные инструкции по
brew install coreutils
источник
С уважением
sed
вы можете скачать скомпилированный двоичный файл изRudix
проекта. Для дальнейшихRudix
пакетов смотрите здесь и здесь .источник