Попытка установить Homebrew на новый Mac (на предыдущих Mac я устанавливал пакеты из исходных текстов).
Первым пакетом, который я попытался установить, был Git:
$ brew install git
Установка прошла нормально, но which git
все еще показывает тот, /usr/bin/git
что пришел вместе с Lion (я думаю?). И не тот, /usr/local/bin/git
который был только что установлен.
$ echo $PATH
/Users/meltemi/.rvm/gems/ruby-1.9.2-p290@rails31/bin:/Users/meltemi/.rvm/gems/ruby-1.9.2-p290@global/bin:/Users/meltemi/.rvm/rubies/ruby-1.9.2-p290/bin:/Users/michael/.rvm/bin:/usr/local/mysql/bin:/opt/subversion/bin:/Developer/Additions/checker/:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin
Как вы можете видеть по /usr/bin
умолчанию, прежде чем /usr/local/bin
в$PATH
Итак, я в замешательстве! Я думал, что смысл HomeBrew (и чем создатели, похоже, хвастаются) в том, что вам не нужно связываться с $PATH
переменной!?!
Итак, что я сделал не так?
If you choose /usr/local, everything 'just works!'
что я должен задаться вопросом, что мне не хватает ... потому что это не "просто работает".Ответы:
Я нашел этот пост очень полезным. Вместо того, чтобы менять
$PATH
переменную, вам просто нужно отредактировать/etc/paths
файл.Доморощенный хочет, чтобы я исправил мой ПУТЬ; понятия не имею, как
Как только я последовал указаниям и изложил
/usr/local/bin
выше/usr/bin
, мои проблемы были решены.sudo vi /etc/paths
/usr/local/bin
путь вводился выше/usr/bin
путиВот как выглядит мой после того, как я это сделал:
* Для сохранения и выхода введите двоеточие (
:
), затем введитеwq
(чтобы написать и выйти одновременно), а затем Enter.Вы также можете открыть
/etc/paths
файл в графическом текстовом редакторе и редактировать его таким образом.Кредит fengd над на переполнение стека для его ответа там.
источник
path_helper
и/etc/paths.d
.Этот ответ устарел. Предпочтительный
PATH
порядок подачи домашнего пива был таким, как объяснено, но это уже не так. Однако этот подход более применим, поэтому ради интереса я оставлю его.Ты не должен.
Homebrew намеренно держит
/usr/local/bin
после/usr/bin
в пути для максимальной совместимости. Изменение порядка следования этих каталоговPATH
путем редактирования/etc/paths
означало бы, что все программы в любом месте системы, независимо от того, как они были запущены, получат версию команды Homebrew. Но некоторые могут ожидать версию Apple или просто не иметь возможности использовать более новую версию и т. Д.Как сохранить этот принцип и все же получить установленную Homebrew версию
git
? Как говорится, все проблемы могут быть решены с помощью уровня косвенности (за исключением слишком большого количества уровней косвенности). - Или в этом случае, как оказалось, два слоя.В частности, это было частью моих привычек Unix - иметь
~/bin
каталог, который я положил в начале своейPATH
. Это один из первых битов в моем.bashrc
:Это проверяет,
PATH
содержит ли~/bin
, и если нет, предваряет это. Имея это в виду, выборочное назначение только того, что управляется Homebrew,git
имеет приоритет над версией системы (вместо каждого двоичного файла, управляемого Homebrew), и только для ваших сессий оболочки (вместо всех программ, запускаемых откуда угодно, включая программы с графическим интерфейсом), так просто, как символические ссылки:Вы можете использовать символическую ссылку
/usr/local/Cellar/git/1.8.2.1/bin/git
напрямую, но тогда вам придется исправлять символическую ссылку каждый раз, когда вы делаетеbrew upgrade git
(прямо или косвенно). Используя символическую ссылку на фиксированное местоположение Homebrew, вы не должны беспокоиться об этом.Таким образом, вы добавляете каталог в свой каталог,
$HOME
чтобы вы могли добавить его,PATH
чтобы вы могли использовать символьную ссылку на символическую ссылку, и это решает вашу проблему и вызывает улыбку у доктора Сьюсса. Да, черт возьми, мне нравятся символическиеPATH
ссылки, поэтому мы указываем путь к ним, чтобы вы могли использовать символические ссылки во время символической ссылки.источник
ln
команде. Первый путь - это цель, а второй - символическая ссылкаexport PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"
Вы не сделали ничего плохого, но кажется довольно ясным, что если бы вы встали
/usr/local/bin
на вашем пути, прежде чем/usr/bin
эта конкретная проблема исчезла бы. Самый простой способ сделать это - сделать что-то вродев вашем
~/.bash_profile
так все, что устанавливает Homebrew, находится первым. Это способ, которым я настроил его на своем Mac, и он работал для меня так долго, однако, YMMV.Похоже, что они верят, что это сработает после
/usr/local/bin
того, как/usr/bin
, поэтому, хотя я мог бы испортить свою собственную$PATH
, я могу видеть, где не хватает их документации:Из расхождений между вики и пивоваром доктор № 10738 . Обратите внимание, что в этом документе говорится: «Часто задаваемые вопросы (приведенная выше цитата) относятся к настройке PATH для приложений с графическим интерфейсом; доктор (совет, который нужно
/usr/local/bin
указать/usr/bin
в вашей PATH) относится к настройке PATH для приложений CLI».источник
/usr/local/bin
с моей$PATH
? Я так считаю. Интересно, должны ли мы вместо этого редактировать порядок путей по умолчанию/etc/paths
или содержимое/etc/paths.d
? Но это повлияет на каждого пользователя ... может быть, не плохо. Во всяком случае, просто хотел посмотреть, как другие люди подошли к этому.PATH
(так, как ты выберешь), чтобы он/usr/local/bin
предшествовал/usr/bin
. Я лично обновитьPATH
ин ,.bash_profile
как предложено здесь./usr/local/bin
даже если они находятся/usr/bin
на пути. Но приложения с графическим интерфейсом нуждаются в особой поддержке? Казалось бы, все приложения, с графическим интерфейсом или без, нуждаются в том, чтобы мы изменили переменную $ PATH. Так чего же мне (или создателям Homebrew) не хватает?Я не согласен с ответом Jthomas. Редактирование файла / etc / paths изменит пути загрузки для всех программ. Это может быть опасно, если системное приложение ожидает найти конкретную версию двоичного файла, но находит другую версию, потому что вы отредактировали файл путей. Вместо этого измените переменную пути в ~ / .bashrc (или ~ / .bash_profile). Тогда ваш путь загрузки изменится только внутри терминала:
Затем перезагрузите Bash или
source ~/.bashrc
, и вы готовы. Поскольку путь доморощенности предшествует чему-либо еще, bash загрузит версию, которую вы скачали с помощью homebrew.источник
.bashrc
по умолчанию не загружается. Вы делаете это вручную?.bashrc
исходный код из своего.bash_profile
. Если вы не хотите создавать rc-файл, вы можете добавить команду в свой.bash_profile
.Насколько я понимаю,
brew
ничего такого не/usr/local/bin
противоречит (имеет то же имя, что и) распределенный исполняемый файл Apple. Таким образом, наличие/usr/local/bin
в пути ранее/bin
и/usr/bin
не должно быть проблемой, потому что не должно быть никаких конфликтов имен. * Однако, смотрите проблемы сls
иtar
, и с использованием других агрегаторов пакетов, таких какfink
иport
(MacPorts), ниже.Brew
делает одну из двух известных мне вещей, которые помогают управлять конфликтами имен:Brew
оставляет несвязанные кеги в подвале. Чтобы установить материал, brew оставляет инструменты там, где они есть, и создает символические ссылки на эти инструменты в/usr/local/bin
. Для инструментов, которыеbrew
не хотят столкновения имен, они не создают символическую ссылку./bin
и/usr/bin
,brew
префиксы ссылки в/usr/local/bin
с «г», так, например, чтобы выполнитьls
с версией заварной, использованиеgls
. Просто делатьls -l
по прибытию/usr/local/bin
и искать ссылки на файлы - это те ,brew
поставленные там. Примечание.brew
Установленные инструменты, к которым должны обращаться их настоящие имена, находятся в/usr/local/Cellar/coreutils/8.21/libexec/gnubin
.Я не ставлю
/usr/local/bin
свой путь по двум причинам - эти причины лежат в основе моего ответа.Чтобы оценить конфликты имен в вашей системе, используйте
brew doctor
и ищите этот раздел. Вотbrew doctor
интересный вывод:Причина, по которой я не ставлю
brew
инструменты на первое место, на самом деле совсем нет, заключается в том, чтоbrew
установленныеls
иtar
команды не обрабатывают ACL файловой системы должным образом. Фактически, в прошлый раз, когда я проверял (что было на прошлой неделе), они не были т вообще . Это БОЛЬШАЯ проблема, и, чтобы избежать ее в целом, наряду сman
проблемой конфигурации страницы, связанной с настройкой$PATH
прав, я обязательно добавлюOSX
соответствующие инструменты, особенно те, которые есть в/bin
и/usr/bin
, во-первых.Еще одна причина , я даже не поставил
/usr/local/bin
на моем пути на всех, потому чтоbrew
не очень хорошо играть с другими, а такжеfink
иport
(MacPorts) имеют намного больше поддерживаемых пакетов в настоящее время, что мне нужно сейчас . Например, я могу получитьgnome-terminal
сfink
, но это было бы большое усилие , чтобы построить формулу и сделать то же самое сbrew
. Итак, я оставляю/sw
и/opt
в поиске$PATH
(дляfink
иport
, соответственно) и ссылках на вещи, которые мне нужны/usr/local/bin
, включаяgnat
либо прописанные, либо использующиеbash
alias
, либо я создаюsetup
файл для совершенно другой среды при написанииAda
кода.Дело в том, что это действительно зависит от того, что вы хотите и нужно в данный момент.
Вот пример проблемы ACL, о которой я упоминал выше.
С помощью стандартных
OSX
инструментов:и с
brew
установленными инструментами:а также
Вы получите аналогичные результаты,
tar
и я не знаю много другихbrew
инструментов, но кто может позволить себе что-то сломать через 6 месяцев из-заACL
проблемы!источник
Здесь есть множество хороших ответов. Вот мой:
Избавляет вас от необходимости создавать отдельный псевдоним для каждой программы, и в качестве бонуса он оставляет установки по умолчанию доступными на случай, если они вам понадобятся.
Работает так же, если вы используете ZSH; просто переключиться
bashrc
наzshrc
. Вы можете переключиться изmy
за_
или даже@
сэкономить на печати.источник
Вместо того, чтобы возиться с PATH вообще (который в моей истории возвращается, чтобы сжечь меня несколько месяцев спустя), я добавил псевдоним для git в мой каталог пользовательских псевдонимов zsh (~ / .zshrc / custom / git_alias.zsh).
alias git='/usr/local/bin/git'
источник
Я предпочитаю ограничивать изменения переменными среды, например,
$PATH
пользователям, которые действительно хотят это изменение. Таким образом, я просто добавляю следующее~/.bashrc
:источник
Вы можете выполнить следующую команду в терминале, она добавит домашний каталог brew + / bin в PATH вашего файла инициализации SHELL "rc" (bash, zsh, csh)
echo "export PATH="'$PATH:$(brew --prefix)/bin' >> ~/.$(basename $SHELL)rc
Наслаждайтесь !
источник