Я обнаружил, что есть некоторые различия между служебной командой, которую я использовал в Mac OSX и Linux. Я хочу объединить свой опыт.
Как я могу заменить все свои утилиты для Mac на утилиты GNU?
Это добавляет символические ссылки для утилит GNU с префиксом g в /usr/local/bin/
:
brew install coreutils findutils gnu-tar gnu-sed gawk gnutls gnu-indent gnu-getopt grep
Смотрите brew search gnu
другие пакеты. Если вы хотите использовать команды без префикса ag, добавьте, например, /usr/local/opt/coreutils/libexec/gnubin
перед другими каталогами в вашем PATH
.
$ brew info coreutils
coreutils: stable 8.21
http://www.gnu.org/software/coreutils
Depends on: xz
/usr/local/Cellar/coreutils/8.20 (208 files, 9.4M)
/usr/local/Cellar/coreutils/8.21 (210 files, 9.6M) *
https://github.com/mxcl/homebrew/commits/master/Library/Formula/coreutils.rb
==> Caveats
All commands have been installed with the prefix 'g'.
If you really need to use these commands with their normal names, you
can add a "gnubin" directory to your PATH from your bashrc like:
PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"
Additionally, you can access their man pages with normal names if you add
the "gnuman" directory to your MANPATH from your bashrc as well:
MANPATH="/usr/local/opt/coreutils/libexec/gnuman:$MANPATH"
shiny-and-gnu.rb
github.com/al-the-x/homebrew-mine ./usr/local/opt/coreutils/libexec/gnuman:
, кажется, оригинальный MANPATH не был включен. После того, как я закомментировал конфиг MANPATH в моем bashrc, я ничего не получил от ecoh $MANPATH
. И, конечно же, если я использую man pwd
, у меня есть руководство по BSD. Как это исправить?findutils
, вам нужно добавить PATH="/usr/local/Cellar/findutils/4.4.2/bin:$PATH"
то, что не указано в выводе консоли установки.findutils
, добавьте ее в свой$MANPATH
/usr/local/opt/findutils/share/man
MANPATH
, чтобы сохранить системное значение по умолчанию: MANPATH="/usr/local/opt/coreutils/libexec/gnuman:${MANPATH-/usr/share/man}"
. Ключ в конструкции ${var-default_value}
.utilDir=coreutils/8.25; cp -a /usr/local/Cellar/${utilDir}/libexec/gnubin/* ~/bin
просто измените utilDir
для каждого набора утилит, которые вы хотите связать. Затем я могу просто установить `PATH="/home/me/bin:$PATH", не создавая такого беспорядка с разными каталогами.find
или какую-либо другую распространенную программу, о которой вы всегда можете сказать, когда получаете сообщение об ошибке, используя find
без аргумента каталога.PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"
помогла. Спасибо!Кроме того brew install coreutils
, вам также может понадобиться установить некоторые другие пакеты, такие как gnu-sed
:grep
brew install findutils
brew install gnu-indent
brew install gnu-sed
brew install gnutls
brew install grep
brew install gnu-tar
brew install gawk
Обратите внимание, что этот --with-default-names
параметр удален с января 2019 года, поэтому каждый двоичный файл необходимо добавить в путь, если он будет использоваться без g
префикса.
Старая ссылка (когда --with-default-names
была доступна): http://www.topbug.net/blog/2013/04/14/install-and-use-gnu-command-line-tools-in-mac-os-x/
brew install gawk
(в отличие от всех остальных) заменит awk
(через символическую ссылку /usr/local/bin/awk
). Если вы хотите сохранить оригинал /usr/bin/awk
, простоrm /usr/local/bin/awk
ping
?ping
это утилита ядра Linux: github.com/iputils/iputilsЯ не уверен, что порекомендовал бы их заменить ; однако вы можете установить их по другому пути и использовать таким образом. В целом, если вы работаете с Linux и хотите получить доступ к более «универсальным» утилитам *nix и системе, похожей на apt, я бы порекомендовал изучить Macports: http://www.macports.org
Это позволяет, например, использовать последний «общий» GCC, в отличие от / в дополнение к включенному Apple GCC, просто в качестве примера.
/opt/local/libexec/gnubin
их в начало PATH
переменной среды.Я написал сценарий, чтобы сделать именно это! Скрипт можно посмотреть здесь (или ниже). Однако я не всегда могу гарантировать, что этот пост будет отражать последнюю версию скрипта, связанного ранее.
После запуска скрипта будет установлен Homebrew (если он еще не установлен), будут установлены все связанные утилиты GNU (если они еще не установлены), а PATH
переменная будет создана из установленных утилит.
#!/bin/bash
# Install Homebrew (if not already installed)
/bin/bash -c "$(curl -fsSL "\
"https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# Install required packages from Homebrew
brew tap homebrew/dupes
brew install coreutils binutils diffutils ed findutils gawk gnu-indent gnu-sed \
gnu-tar gnu-which gnutls grep gzip screen watch wdiff wget bash gdb gpatch \
m4 make nano file-formula git less openssh python rsync svn unzip vim \
--default-names --with-default-names --with-gettext --override-system-vi \
--override-system-vim --custom-system-icons
# Empty the .bash_path file that holds GNU paths
[[ -f ~/.bash_path ]] && mv ~/.bash_path ~/.bash_path.orig
# Build PATH variable script in ~/.bash_path
for i in /usr/local/Cellar/*/*/bin; do
echo 'export PATH="'$i':$PATH"' >> ~/.bash_path
done
for i in /usr/local/Cellar/*/*/libexec/gnubin; do
echo 'export PATH="'$i':$PATH"' >> ~/.bash_path
done
for i in /usr/local/Cellar/*/*/share/man; do
echo 'export MANPATH="'$i':$MANPATH"' >> ~/.bash_path
done
for i in /usr/local/Cellar/*/*/libexec/gnuman; do
echo 'export MANPATH="'$i':$MANPATH"' >> ~/.bash_path
done
# Check if .bash_path is being called from .bash_profile
PATCH=`grep "~/.bash_path" ~/.bash_profile`
if [ "$PATCH" == "" ]; then
# Add Ubuntu-style PS1 to .bash_profile
cat <<EOF > ~/.bash_profile
export PS1="\[\033[1;32m\]\u@\h\[\033[0m\]:\[\033[1;34m\]\w\[\033[0m\]# "
EOF
# Add .bash_path to .bash_profile
echo "source ~/.bash_path" >> ~/.bash_profile
fi
Я написал сценарий, который прозрачно преобразует интерфейс командной строки macOS в новый интерфейс командной строки GNU/Linux.
https://github.com/fabiomaia/linuxify
git clone https://github.com/fabiomaia/linuxify.git
cd linuxify/
./linuxify install
Это также позволяет вам легко отменить все.
./linuxify uninstall
git clone git@github.com.:fabiomaia/linuxify.git
). Сначала она сказала: «Подлинность хоста« github.com »не может быть установлена и т. Д.». Я набрал yes
и нажал Enter. Затем он сказал git@github.com: Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.
, что не так?git clone https://github.com/fabiomaia/linuxify.git
В качестве альтернативы установке переменных среды PATH и MANPATH (что я бы рекомендовал) также можно символически связать двоичные файлы с существующим местоположением PATH следующим образом:
Вам нужно знать, куда Homebrew устанавливает coreutils
бинарные файлы.
/usr/local/opt/coreutils/bin
В /usr/local/opt
этом каталоге Homebrew хранит относительно статические файлы, которые вряд ли изменятся между обновлениями.
Затем вы можете создать оттуда символические ссылки на местоположение, которое уже находится в вашем PATH. Это должен быть путь, загружаемый в PATH на ранней стадии, поскольку поиск в PATH осуществляется в порядке поступления. /usr/local/bin
хороший выбор, основанный на просмотре echo $PATH
.
which sha256sum # prove it is not on PATH
ln -s /usr/local/opt/coreutils/bin/sha256sum /usr/local/bin/
which sha256sum # prove it is on PATH
Таким образом, было бы почти так же легко создавать символические ссылки. В некоторых случаях, например, когда вам нужен более жесткий контроль, это хороший вариант, а не добавление всего каталога в ваши PATH и MANPATH.
левша
Деннис
cwd
homebrew
, как указано ниже, а затем просто научиться использовать утилиты с ag
(gsed
,greadlink
, и т. д. ) вместо замены системных утилит.Дэн Приттс
Рэй Фосс
--with-default-names
влияет только на локального пользователя. Это может быть проблема с утилитами терминала, ориентированными на Mac, но если вы используете homebrew для всего, вы также можете притвориться, что используете Linux. Смешанный с iterm2, он отлично работает для меня, я могу в основном притворяться, что я дома со своими Linux-боксами.смки
Зеарин
cp
иmv
может быть опасным для расширенных атрибутов файла (например, тегов, невидимости, псевдонима, пакета и т. д.). Подробнее см. в этих двух статьях: bretttrpstra.com/2014/07/03/… bretttrpstra.com/2014/07/04/how-to-lose-your-tags Они немного устарели, но я просто хочу поднять предупреждение, чтобы вы могли исследовать, если вы используете GNU,mv
и оноcp
будет мешать вашим потребностям.буйный
Де Ново
бульо
Код новичка
бульо