Есть ли проблема с наличием /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 69

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 для использования всеми программами, которые фактически проверяют общесистемный путь.

  1. создайте новый каталог, который будет использоваться в переопределении, например /usr/local/git-override/
  2. создайте новые символьные ссылки из Git-override на Git-программы homebrew. Просто переделайте символические ссылки git из /usr/local/bin.
  3. добавьте /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 швов не рекомендуется для стабильности и безопасности системы ... вот мое решение, которое основано на ответе @vmrob

read 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