70 votes

Est-il un problème avec le fait d'avoir /usr/local/bin avant /usr/bin sur le chemin d'accès dans OS X?

Par défaut, mac OS X 10.6 utilise /usr/libexec/path_helper d'ajouter les chemins d'accès suivants énumérés dans le fichier /etc/paths:

/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin

Cela signifie qu' /usr/bin "vient avant" /usr/local/bin sur le chemin. Cela se traduit dans la version de git installé par Xcode 4 en /usr/bin à être appelé à la place de la version installée par Homebrew en /usr/local/bin.

Ce qui m'amène à ma question, est-il un problème avec le fait d'avoir /usr/local/bin venir avant /usr/bin dans le chemin d'accès? Est-il une raison spécifique que Apple par défaut, ayant /usr/bin venir avant /usr/local/bin?

Comment faire pour modifier l'ordre d' /usr/bin et /usr/local/bin

Est-ce un problème pour déplacer /usr/local/bin à partir de la fin du fichier /etc/paths vers le haut? Le faire aurait des conséquences sur le chemin pour plus que juste quand je lance le Terminal, depuis /usr/libexec/path_helper pourrait être utilisé par d'autres ressources (je ne suis pas certain à ce sujet).

Bien que redondante, il semble plus sûr pour moi d'ajouter /usr/local/bin le chemin de ~/.bash_profile, ce qui signifie que, /usr/local/bin serait sur le chemin plus d'une fois.

27voto

Forrest Voight Points 1966

Non, et non. Ils sont juste un peu bizarre ... locales, par définition, doit l'emporter.

3voto

Ohgyun Ahn Points 174

J'ai eu des ennuis avec le même problème, et trouvé le lien ci-dessous à partir d'une recherche sur google.

https://discussions.apple.com/thread/3588837?start=0&tstart=0

Ils ont dit que la modification de /etc/chemins n'est pas une bonne idée pour des raisons de sécurité.

2voto

vmrob Points 1037

Je voudrais juste ajouter que si vous souhaitez conserver votre CHEMIN propre (pas d'entrées), vous pouvez ajouter les lignes suivantes à votre .bash_profile pour obtenir l'effet désiré:

# 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"

J'ai appris que le petit truc de http://ntk.me/2013/05/04/path-environment-variable/

Edit: Très important! N'obtenez pas la afin que ceux-ci sont retirés de mal! Si vous le faites, sed ne fonctionnera pas et vous serez à gauche avec /usr/local/bin:/usr/bin: que votre CHEMIN!

Il est également intéressant de noter que les autres, ce qui suggère que cela pourrait causer certains problèmes de sécurité sont correctes. Veuillez vous assurer que vous comprenez les risques encourus!

2voto

Complex Points 71

J'ai trouvé tous les ci-dessus utiles, en particulier @Ohgyun Ahn de l' avertissement. Je suggère donc un compromis, j'ai juste mis en œuvre:

Edit /etc/paths ou /private/etc/paths (comme il l'est dans OS X 10.8) et remplacer git seul. Qui échappe à toute implications en matière de sécurité (sans rapport avec git, de toute façon), alors que la mise en œuvre de l'up-to-date de git pour une utilisation par tous les programmes qui en fait le contrôle du système à l'échelle de chemin.

  1. Créer un nouveau répertoire à être utilisés dans le remplacement, par exemple /usr/local/git-override/
  2. Faire de nouveaux liens symboliques à partir de git-le remplacement homebrew git du programmes. Juste refaire le git liens symboliques à partir d' /usr/local/bin.
  3. ajouter /usr/local/git-override vers le haut de l' (/private)/etc/paths.

J'espère que c'est utile à quelqu'un d'autre.

1voto

166_MMX Points 201

Depuis la modification de l'ordre du /etc/paths coutures pour être découragés pour la stabilité du système et de la sécurité ... voici ma solution qui est basée sur la réponse de @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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X