Установка командных утилит GNU на macOS
MacOS не содержит некоторых программ GNU (watch
, wget
, wdiff
, gdb
, autoconf
) и поставляется с программами-аналогами BDS (sed
, tar
, which
, grep
, awk
, и это лишь некоторые из них). Кроме того, некоторые программы GNU, установленные в macOS, устарели (например, bash
, emacs
, less
, nano
и т. Д.).
Возможно, вы столкнулись с тем, что на вашем терминале не работает сценарий Bash или однострочный. Сценарий мог быть предназначен для GNU / Linux или, возможно, был написан без учета POSIX.
Если вы хотите разрабатывать сценарии Bash или работать с командной строкой, подобными GNU / Linux, то один из способов сделать это - установить командные утилиты GNU на вашу macOS.
Вот примеры использования команды sed
. Следующее работает в Linux, но не в терминале macOS:
sed -i
не работает в macOS:
$ sed -i 's/That/This/' file_0.txt sed: 1: "file_0.txt": invalid command code f
macOS поставляется с BSD sed
:
$ which sed /usr/bin/sed $ sed --version sed: illegal option -- - usage: sed script [-Ealnru] [-i extension] [file ...] sed [-Ealnu] [-i extension] [-e script] ... [-f script_file] ... [file ...]
В этой статье вы найдете три способа установки программ GNU на вашу macOS.
linuxify и Macgnu
Я нашел linuxify, который преобразует CLI macOS в GNU / Linux с помощью:
- Установка программ GNU, которых нет в macOS:
watch, wget, wdiff, gdb, autoconf
- Установка программ GNU, аналоги BSD которых установлены в macOS:
coreutils, binutils, diffutils, ed, findutils, gawk, gnu-indent, gnu-sed, gnu-tar, gnu-which, grep, gzip, screen
- Установка устаревших программ GNU в macOS:
bash, emacs, gpatch, less, m4, make, nano, bison
- Установка устаревшей программы BSD:
flex
- Установка общих программ GNU:
libressl, file-formula, git, openssh, perl, python, rsync, unzip, vim
Но если вы уже установили Python, vim и Git, вы можете получить ошибки с помощью linuxify (эти ошибки являются преднамеренными, чтобы вы могли их исправить).
Я модифицировал linuxify и создал новое репо под названием Macgnu.
Между linuxify и Macgnu есть два различия:
- Macgnu не установит:
libressl, file-formula, git, openssh, perl, python, rsync, unzip, vim
- Он не спросит, хотите ли вы сменить оболочку на последнюю версию Bash.
Оба используют Homebrew для установки программ.
Установка с помощью Macgnu
Клонируйте Macgnu и выполните install
команду:
$ git clone [email protected]:shinokada/macgnu.git cd macgnu ./macgnu install
Если вы обнаружите какие-либо ошибки, вы найдете решение после ошибки. Решения являются выходами из Homebrew.
Отличный менеджер пакетов
После установки Удивительного менеджера пакетов:
awesome install shinokada/macgnu
Дорожка
Репо установит ~/.macgnu
файл, в котором есть все пути, необходимые для установленных программ.
Добавьте следующее в ~/.zshrc
или ~/.bashrc
:
. ~/.macgnu
Это будет источником ~/.macgnu
файла.
Выполните следующее, чтобы проверить sed
:
Если вы используете oh-my-zsh, у вас будет такой вывод, когда вы проверите программу grep
:
Вы можете изменить оболочку на Bash:
$ chsh -s /usr/local/bin/bash
Откройте новую вкладку и проверьте ее еще раз, запустив which grep
в оболочке Bash:
Вы можете вернуться к ZSH:
$ which -a zsh
/bin/zsh
$ chsh -s /bin/zsh
Changing shell for shinokada.
Password for shinokada:
Затем откройте новую вкладку, чтобы использовать ZSH.
Удаление Macgnu
Команда uninstall
удаляет все программы, кроме Bash.
Удалите следующую строку из ~/.zshrc
и ~/.bashrc
.
. ~/.macgnu
Установка с помощью linuxify
Вы можете выбрать установку программ GNU с помощью linuxify:
$ git clone https://github.com/fabiomaia/linuxify.git $ cd linuxify/ $ ./linuxify install
Он добавит файл с именем ~/.linuxify
и экспортирует все необходимые пути. Вам необходимо добавить в свой ~/.zshrc
или ~/.bashrc
следующее:
. ~/.linuxify
Это будет источником ~/.linuxify
файла.
Если у вас возникли проблемы…
Вы можете столкнуться с некоторыми ошибками при установке программ с помощью linuxify.
Git
Если у вас установлен Git, вы можете столкнуться с проблемой:
Вам нужно перезаписать ссылку Git:
brew link --overwrite git Linking /usr/local/Cellar/git/2.30.1... 210 symlinks created.
Python
Если у вас установлен Python, у вас может возникнуть проблема:
Вам необходимо установить xcode-select
:
$ xcode-select --install xcode-select: note: install requested for command line developer tools
vim / macvim
Если у вас установлен vim или macvim, у вас может быть проблема:
Вам нужно отключить macvim:
$ brew unlink macvim Unlinking /usr/local/Cellar/macvim/8.2-169_2... 13 symlinks removed.
Как удалить linuxify
./linuxify uninstall
Удалите следующую строку из ~/.zshrc
или ~/.bashrc
:
. ~/.linuxify
Установка того, что вам нужно
Ищите формулы GNU Homebrew, используя:
$ brew search gnu
Затем вы можете установить формулы GNU по вашему выбору:
$ brew install coreutils findutils gnu-tar gnu-sed gawk gnutls gnu-indent gnu-getopt grep
Вам нужно добавить их пути в ~/.zsh
или ~/.bashrc
:
Указанные выше пути необходимо поместить перед /usr/bin
path:
$ echo $PATH .......:/usr/local/opt/coreutils/libexec/gnubin:/usr/local/opt/findutils/libexec/gnubin:/usr/local/opt/gnu-tar/libexec/gnubin:/usr/local/opt/gnu-sed/libexec/gnubin:/usr/local/opt/gnu-indent/libexec/gnubin:/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:.......
Давайте проверим, какой sed
вы используете сейчас:
$ which sed /usr/local/opt/gnu-sed/libexec/gnubin/sed $ sed --version sed (GNU sed) 4.8 Copyright (C) 2020 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.
Заключение
Если для ваших сценариев важна переносимость, вам необходимо написать сценарий Bash со стандартами POSIX. Если вам просто нравится GNU / Linux на своей macOS, один из описанных выше методов предоставит вам доступ к программам GNU.
Macgnu устанавливает программы GNU, программы-аналоги BDS и устаревшие программы на macOS. Linuxify устанавливает их все, а также распространенные программы, такие как Python, Git, Perl и т. Д. Если они вам не нужны, вы можете установить их одну за другой.
Получите полный доступ ко всем статьям на Medium, став участником.