Установка командных утилит 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, став участником.