Я сочувствую вашим разочарованиям, но я считаю, что в долгосрочной перспективе это вызовет еще большее разочарование, если они будут заменены. После того, как я попытаюсь сделать то же самое, я бы порекомендовал использовать, homebrewкак указано ниже, а затем просто научиться использовать утилиты с g( gsed, greadlinkи т.д.) вместо замены системных утилит.
Я не согласен с @cwd, использование --with-default-namesтолько влияет на локального пользователя. Это может быть проблемой с Mac-ориентированными терминальными утилитами, но если вы используете homebrew для всего, вы также можете притворяться, что используете linux. Смешанный с iterm2, он отлично работает для меня, я могу притвориться, что я дома с моими linux-боксами.
Рэй Фосс
Ответы:
210
Это добавляет символические ссылки для утилит GNU с префиксом g для /usr/local/bin/:
Смотрите brew search gnuдля других пакетов. Если вы хотите использовать команды без префикса ag, добавьте, например, /usr/local/opt/coreutils/libexec/gnubinперед другими каталогами на вашем PATH.
$ brew info coreutils
coreutils: stable 8.21
http://www.gnu.org/software/coreutilsDepends 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==>CaveatsAll 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"
FWIW, у меня есть формула Homebrew, которая действует как метапакет для всех этих замечательных утилит GNU: см. shiny-and-gnu.rbВ github.com/al-the-x/homebrew-mine
AL the X
1
Первый PATH работает, но MANPATH потерпел неудачу, почему? Это потому, что я использую OSX10.10? Я повторил $ MANPATH, и я получил /usr/local/opt/coreutils/libexec/gnuman:, кажется, оригинальная MANPATH не была включена. После того, как я прокомментировал конфету MANPATH в моем bashrc, я ничего не получил ecoh $MANPATH. И, конечно, если я использую man pwd, я получил руководство BSD. Как это исправить?
Дзен
2
Для findutils, вам нужно добавить PATH="/usr/local/Cellar/findutils/4.4.2/bin:$PATH"что не указано в выводе консоли установки.
Шридхар Сарнобат
1
Кроме того, чтобы получить нужную справочную страницу findutils, добавьте ее на свой$MANPATH/usr/local/opt/findutils/share/man
Christian Long
1
@Zen: правильный путь , чтобы начать MANPATHтаким образом , чтобы сохранить значение системы по умолчанию: MANPATH="/usr/local/opt/coreutils/libexec/gnuman:${MANPATH-/usr/share/man}". Ключ находится в конструкции ${var-default_value}.
дан
50
Кроме того brew install coreutils, вы можете также необходимо установить другие пакеты, такие как gnu-sed, grep:
Обратите внимание, что эта --with-default-namesопция удалена с января 2019 года, поэтому каждый двоичный файл должен быть добавлен в путь, если они должны использоваться без gпрефикса.
Обратите внимание, что brew install gawk(в отличие от всех остальных) заменит awk(через символическую ссылку /usr/local/bin/awk). Если вы хотите сохранить оригинал /usr/bin/awk, простоrm /usr/local/bin/awk
wisbucky
17
Я не уверен, что рекомендовал бы заменить их; однако вы можете установить их по другому пути и использовать их таким образом. В целом, если вы пришли из Linux и хотели бы получить доступ к более «универсальным» * утилитам nix и системе, аналогичной apt, то я бы порекомендовал заглянуть в Macports:
http://www.macports.org
Это позволяет, например, использовать последний «универсальный» GCC, в отличие от / в дополнение к включенному GCC от Apple, просто в качестве примера.
Например, tar и zip из Mac OS X знают о метаданных, чего нет в версиях GNU.
LHF
1
Есть поставляемые Apple приложения, которые являются всего лишь графическим интерфейсом для некоторых инструментов командной строки, и если вы замените их, приложения могут начать странно себя вести, поэтому продолжайте добавлять, а не заменять.
Ɱark Ƭ
Правильно; что-то вроде Macports добавляет их, но не заменяет их.
Джонатан
Если вы хотите использовать утилиты GNU по умолчанию с MacPorts, вы можете добавить их /opt/local/libexec/gnubinв начало своей PATHпеременной среды.
отмечается
8
Я написал сценарий, чтобы сделать именно это! Сценарий можно посмотреть здесь (или ниже). Тем не менее, я не всегда могу гарантировать, что этот пост будет отражать последнюю версию скрипта, на которую ссылались ранее.
После запуска сценария будет установлен Homebrew (если еще нет), будут установлены все связанные утилиты GNU (если еще нет), и PATHпеременная будет построена из установленных утилит.
#!/bin/bash# Install Homebrew (if not already installed)
ruby -e "$(curl -fsSL "\"https://raw.githubusercontent.com/Homebrew/install/master/install)"# 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>~/.bash_path# Build PATH variable script in ~/.bash_pathfor i in/usr/local/Cellar/*/*/bin;do
echo 'export PATH="'$i':$PATH"'>>~/.bash_pathdonefor i in/usr/local/Cellar/*/*/libexec/gnubin;do
echo 'export PATH="'$i':$PATH"'>>~/.bash_pathdonefor i in/usr/local/Cellar/*/*/share/man;do
echo 'export MANPATH="'$i':$MANPATH"'>>~/.bash_pathdonefor i in/usr/local/Cellar/*/*/libexec/gnuman;do
echo 'export MANPATH="'$i':$MANPATH"'>>~/.bash_pathdone# 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_profilefi
Разве вам не нравятся отрицательные отзывы без критических комментариев? Спасибо за сценарий.
Джастин Форс
@JustinForce Нет проблем! Спасибо за ваш отзыв!
Глина Фриман
2
-1. Этот сценарий делает слишком много магии. Вся эта .bash_pathошибка не нужна, если вы следуете ответам @ user495470 и @ xuhdev. И смена PS1 полностью выходит за рамки этого вопроса.
Грег Дубицки
1
@GregDubicki, к сожалению, для некоторых из этих пакетов необходим путь искажения bash. Вы можете проверить это сами. Что касается смены PS1: этот скрипт для личного пользования. Любой, кто хочет вернуть его, может сделать это очень легко.
Глина Фриман
5
Я написал скрипт, который прозрачным образом преобразует интерфейс командной строки MacOS в новый интерфейс командной строки GNU / Linux.
установка недостающих программ GNU
обновление устаревших программ GNU
замена предустановленных программ BSD их предпочтительной реализацией GNU
установка других программ, распространенных среди популярных дистрибутивов GNU / Linux
Попытка выполнить первую команду ( 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.что не так?
Изогфиф
@izogfif Попробуйте вместо этого клонировать с HTTPSgit clone https://github.com/fabiomaia/linuxify.git
fabiomaia
1
Да, это сработало. Пожалуйста, обновите свой ответ (также удалите эти доллары в начале - они копируются при выделении текста и копировании и вставке в консоль).
homebrew
как указано ниже, а затем просто научиться использовать утилиты сg
(gsed
,greadlink
и т.д.) вместо замены системных утилит.--with-default-names
только влияет на локального пользователя. Это может быть проблемой с Mac-ориентированными терминальными утилитами, но если вы используете homebrew для всего, вы также можете притворяться, что используете linux. Смешанный с iterm2, он отлично работает для меня, я могу притвориться, что я дома с моими linux-боксами.Ответы:
Это добавляет символические ссылки для утилит GNU с префиксом g для
/usr/local/bin/
:Смотрите
brew search gnu
для других пакетов. Если вы хотите использовать команды без префикса ag, добавьте, например,/usr/local/opt/coreutils/libexec/gnubin
перед другими каталогами на вашемPATH
.источник
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}
.Кроме того
brew install coreutils
, вы можете также необходимо установить другие пакеты, такие какgnu-sed
,grep
:Обратите внимание, что эта
--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
Я не уверен, что рекомендовал бы заменить их; однако вы можете установить их по другому пути и использовать их таким образом. В целом, если вы пришли из Linux и хотели бы получить доступ к более «универсальным» * утилитам nix и системе, аналогичной apt, то я бы порекомендовал заглянуть в Macports: http://www.macports.org
Это позволяет, например, использовать последний «универсальный» GCC, в отличие от / в дополнение к включенному GCC от Apple, просто в качестве примера.
источник
/opt/local/libexec/gnubin
в начало своейPATH
переменной среды.Я написал сценарий, чтобы сделать именно это! Сценарий можно посмотреть здесь (или ниже). Тем не менее, я не всегда могу гарантировать, что этот пост будет отражать последнюю версию скрипта, на которую ссылались ранее.
После запуска сценария будет установлен Homebrew (если еще нет), будут установлены все связанные утилиты GNU (если еще нет), и
PATH
переменная будет построена из установленных утилит.источник
.bash_path
ошибка не нужна, если вы следуете ответам @ user495470 и @ xuhdev. И смена PS1 полностью выходит за рамки этого вопроса.Я написал скрипт, который прозрачным образом преобразует интерфейс командной строки MacOS в новый интерфейс командной строки GNU / Linux.
https://github.com/fabiomaia/linuxify
Это также позволяет вам легко отменить все.
источник
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