Есть ли проблема с наличием /usr / local/bin перед /usr/bin на пути в OS X?
По умолчанию OS X 10.6 использует /usr/libexec/path_helper
для добавления следующих путей, перечисленных в файле /etc/paths
:
/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin
Это означает, что /usr/bin
идет впереди /usr/local/bin
на пути. Это приводит к тому, что версия git, установленная Xcode 4 в /usr/bin
, вызывается вместо версии, установленной Homebrew в /usr/local/bin
.
Что приводит меня к моему вопросу, есть ли проблема с тем, чтобы /usr/local/bin
прийти раньше /usr/bin
на пути? Есть ли конкретная причина, по которой Apple по умолчанию имеет /usr/bin
come до /usr/local/bin
?
Как изменить порядок /usr/bin
и /usr/local/bin
Является ли проблемой перемещение /usr/local/bin
из нижней части файла /etc/paths
в верхнюю? Это повлияет на путь больше, чем просто когда я запускаю терминал, так как /usr/libexec/path_helper
может использоваться другими ресурсами (я не уверен в этом).
Будучи избыточным, мне кажется более безопасным добавить /usr/local/bin
к пути в ~/.bash_profile
, что означало бы, что /usr/local/bin
будет на пути дважды.
5 ответов:
У меня были проблемы с той же проблемой, и я нашел ссылку ниже из Google.
Https://discussions.apple.com/thread/3588837?start=0&tstart=0
Они сказали, что изменение /etc/paths не является хорошей идеей по соображениям безопасности.
Я нашел все вышесказанное полезным, особенно предупреждение@Ohgyun Ahn. Поэтому я предлагаю компромисс, который я только что реализовал:
Редактировать
/etc/paths
или/private/etc/paths
(как в OS X 10.8) и переопределять git в одиночку. Это позволяет избежать любых последствий для безопасности (во всяком случае, не связанных с git) при реализации обновленного git для использования всеми программами, которые фактически проверяют общесистемный путь.Надеюсь, это поможет кому-то еще.
- создайте новый каталог, который будет использоваться в переопределении, например
/usr/local/git-override/
- создайте новые символьные ссылки из Git-override на Git-программы homebrew. Просто переделайте символические ссылки git из
/usr/local/bin
.- добавьте
/usr/local/git-override
в начало(/private)/etc/paths
.
Я просто хотел бы добавить, что если вы хотите сохранить свой путь чистым (без повторяющихся записей), вы можете добавить следующее .bash_profile для достижения желаемого эффекта:
# remove /usr/local/bin and /usr/bin export PATH=`echo ":$PATH:" | sed -e "s#:/usr/local/bin:#:#g" -e "s/^://" -e "s/:$//"` export PATH=`echo ":$PATH:" | sed -e "s#:/usr/bin:#:#g" -e "s/^://" -e "s/:$//"` # add /usr/local/bin and /usr/bin in that order export PATH="/usr/local/bin:/usr/bin:$PATH"
Я научился этому маленькому трюку у http://ntk.me/2013/05/04/path-environment-variable/
Правка: очень важно! Не получите приказ, что они удалены неправильно! Если вы это сделаете,
sed
не будет работать, и вы останетесь с/usr/local/bin:/usr/bin:
как ваш путь!Также стоит отметить, что другие предположение о том, что это может привести к некоторым проблемам безопасности, является правильным. Пожалуйста, не забывайте о рисках, связанных с этим!
Так как изменение порядка
/etc/paths
швов не рекомендуется для стабильности и безопасности системы ... вот мое решение, которое основано на ответе @vmrobread PATH < <(echo "$PATH" | sed \ -e 's/^/:/' -e 's/$/:/' \ -e 's_:/usr/local/bin:_:_g' \ -e 's_:/usr/local/sbin:_:_g' \ -e "s_:/usr/bin:/bin:_:$HOME/bin:/usr/local/bin:/usr/bin:/bin:_" \ -e "s_:/usr/sbin:/sbin:_:$HOME/sbin:/usr/local/sbin:/usr/sbin:/sbin:_" \ -e 's/^://' -e 's/:$//') export PATH