2011-08-17 19:36:41 +0000 2011-08-17 19:36:41 +0000
86
86

Comment dois-je définir la variable PATH sur mon Mac pour que les outils installés par Hombrew- soient trouvés ?

Essayer de configurer Homebrew sur un nouveau Mac (sur les Macs précédents, j'installais les paquets à partir des sources).

Le premier paquet que j'ai essayé d'installer était Git :

$ brew install git

L'installation s'est bien passée, mais which git montre toujours celui de /usr/bin/git qui était fourni avec Lion (je crois ?). Et pas celui de /usr/local/bin/git qui vient d'être installé.

$ 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

Comme vous pouvez le voir, /usr/bin est la valeur par défaut avant /usr/local/bin dans le $PATH

Donc, je suis confus ! Je pensais que le but de HomeBrew (et quelque chose dont les créateurs semblent se vanter) était que vous n'ayez pas à jouer avec la variable $PATH ! ?

Alors, qu'est-ce que j'ai fait de mal ?

Réponses (9)

79
79
79
2013-01-13 22:35:02 +0000

J'ai trouvé ce post connexe très utile. Au lieu de changer la variable $PATH, il vous suffit de modifier votre fichier /etc/paths. Homebrew veut que je modifie mon PATH ; aucune idée de comment

Dès que j'ai suivi les instructions et mis /usr/local/bin au-dessus de /usr/bin, mes problèmes ont été résolus.

  1. sur OS X, ouvrir le terminal
  2. Tapez la commande : sudo vi /etc/paths
  3. Entrez votre mot de passe si on vous le demande
  4. Vous verrez une liste de chemins d'accès. Modifiez-les de manière à ce que le chemin /usr/local/bin soit saisi au-dessus du chemin /usr/bin
  5. *Enregistrez et quittez
  6. Redémarrez le terminal

Voici à quoi ressemble le mien après avoir fait cela :

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

*Pour enregistrer et quitter, tapez deux points (:), puis tapez wq (pour écrire et quitter en même temps), suivi de Entrée.

Vous pouvez également ouvrir le fichier /etc/paths dans un éditeur de texte graphique et le modifier de cette façon.

Crédit à fengd over à Stack Overflow pour sa réponse là-bas.

29
29
29
2013-04-09 23:28:21 +0000

Cette réponse est obsolète. L'ordre préféré des Homebrew PATH était autrefois tel qu'expliqué, mais ce n'est plus vrai. Cependant, l'approche est plus généralement applicable, donc pour des raisons d'intérêt, je laisse tomber.


Vous ne devriez pas.

Homebrew garde intentionnellement /usr/local/bin après /usr/bin dans le chemin pour une compatibilité maximale. Inverser l'ordre de ces répertoires dans PATH en éditant /etc/paths signifierait que tous les programmes, où qu'ils soient sur le système, peu importe comment ils ont été lancés, obtiendront la version Homebrew d'une commande. Mais certains peuvent s'attendre spécifiquement à la version d'Apple, ou simplement ne pas pouvoir utiliser une version plus récente, etc.

Comment préserver ce principe tout en obtenant la version Homebrew de git ? Comme le dit le proverbe, tous les problèmes peuvent être résolus avec une couche d'indirection (sauf si l'on a trop de couches d'indirection). - Ou dans ce cas, il s'avère qu'il y a deux couches.

Plus précisément, cela fait partie de mes habitudes Unix d'avoir un répertoire ~/bin que je mets au début de mon PATH. C'est l'un des premiers bits de mon .bashrc :

[[:$PATH: == *:$HOME/bin:*]] || PATH=$HOME/bin:$PATH

Cela permet de vérifier si PATH contient ~/bin, et si ce n'est pas le cas, de le préfixer. Une fois cela en place, il suffit de faire en sorte que la version git gérée par le Homebrew ait la priorité sur la version du système (au lieu de tous les binaires gérés par le Homebrew), et de faire en sorte que, pour vos sessions shell (au lieu de tous les programmes lancés de n'importe où, y compris les programmes de l'interface graphique), il suffit d'établir un lien symbolique :

ln -s /usr/local/bin/git ~/bin/git

Vous pourriez faire un lien symbolique /usr/local/Cellar/git/1.8.2.1/bin/git directement, mais vous devriez alors corriger votre lien symbolique chaque fois que vous faites un brew upgrade git (directement ou indirectement). En créant un lien symbolique avec le lien symbolique à emplacement fixe de Homebrew, vous n'avez pas à vous en soucier.

Donc vous ajoutez un répertoire à votre $HOME donc vous pouvez l'ajouter à votre PATH donc vous pouvez faire un lien symbolique avec un lien symbolique, et cela résout votre problème et fait sourire le Dr Seuss. J'ai l'impression que vous aimez les liens symboliques, alors on met un chemin dans votre PATH pour que vous puissiez faire des liens symboliques pendant que vous faites des liens symboliques.

18
18
18
2011-08-17 19:42:55 +0000

Vous n'avez rien fait de mal, mais il semble assez clair que si vous aviez /usr/local/bin sur votre chemin avant /usr/bin ce problème spécifique disparaîtrait. La solution la plus simple est de faire exactement cela et de mettre quelque chose comme

export PATH=/usr/local/bin:$PATH

dans votre ~/.bash_profile pour que tout ce que Homebrew installe soit trouvé en premier. C'est comme ça que je l'ai installé sur mon Mac, et ça marche pour moi depuis si longtemps, cependant, YMMV.

Il semble qu'ils croient que ça fonctionnerait avec /usr/local/bin étant après /usr/bin, donc même si j'ai peut-être sali mon propre $PATH, je peux voir où leur documentation manque :

Notez que vous devriez mettre /usr/local/bin après /usr/bin parce que certains programmes s'attendent à obtenir la version système de, par exemple, ruby, et à se casser s'ils obtiennent la version Homebrew plus récente.

De Divergence entre wiki & brew doctor #10738 .&nbsp ; Notez que ce document continue en disant, “Le FAQ (la citation ci-dessus) fait référence au paramètre PATH pour les applications GUI ; le docteur (le conseil de mettre /usr/local/bin avant /usr/bin dans votre PATH) fait référence au paramètre PATH pour les applications CLI”.

6
6
6
2013-04-03 19:28:03 +0000

Je ne suis pas d'accord avec la réponse de Jthomas. L'édition de votre fichier /etc/paths modifiera les chemins de chargement de tous les programmes. Cela peut être dangereux si une application système s'attend à trouver une version spécifique d'un binaire mais trouve une version différente parce que vous avez modifié votre fichier paths. Changez plutôt votre variable path dans ~/.bashrc (ou ~/.bash_profile). Votre chemin de chargement ne changera alors qu'à l'intérieur du terminal :

Ajouter l'application homebrew à PATH

exporter PATH=/path/to/homebrew/app/bin:$PATH

Puis recharger bash ou source ~/.bashrc, et vous pouvez y aller. Comme le chemin du homebrew vient avant tout, bash chargera la version que vous avez téléchargée avec le homebrew.

5
5
5
2014-01-03 22:07:43 +0000

Si je comprends bien, brew ne met rien dans /usr/local/bin qui entre en collision (a le même nom que) un exécutable distribué par Apple. Par conséquent, avoir /usr/local/bin dans le chemin avant /bin et /usr/bin ne devrait pas être un problème, car il ne devrait pas y avoir de collision de noms. *Cependant, voir les problèmes avec ls et tar, et en utilisant d'autres agrégateurs de paquets comme fink et port (MacPorts), tout en bas.

Brew fait l'une des deux choses que je connais qui aident à gérer les collisions de noms :

  1. Brew laisse les fûts non liés dans la cave. Pour installer des trucs, l'infusion laisse les outils là où ils sont, et crée des liens symboliques vers ces outils dans /usr/local/bin. Pour les outils avec lesquels brew ne veut pas de collision de nom, il ne crée pas de lien symbolique.
  2. Pour beaucoup, sinon tous les outils standard qui sont aussi dans /bin et /usr/bin, brew préfixe le lien dans /usr/local/bin avec un “g”, donc par exemple, pour effectuer un ls avec une version de brassage, utilisez gls. Faites simplement un ls -l dans /usr/local/bin et cherchez les fichiers liés - ce sont ceux que brew a mis là. Note : Les outils brew installés qui doivent être accessibles par leur vrai nom se trouvent dans /usr/local/Cellar/coreutils/8.21/libexec/gnubin.

Je ne mets pas /usr/local/bin dans mon chemin pour deux raisons - ces raisons sont au bas de ma réponse.

Pour évaluer les collisions de noms dans votre système, utilisez brew doctor et cherchez cette section - Voici la sortie d'intérêt de brew doctor :

Warning: /usr/bin occurs before /usr/local/bin
This means that system-provided programs will be used instead of those
provided by Homebrew. The following tools exist at both paths:

    ctags
    emacs
    emacsclient
    etags
    ex
    git
    git-cvsserver
    git-receive-pack
    git-shell
    git-upload-archive
    git-upload-pack
    rview
    rvim
    view
    vim
    vimdiff
    vimtutor
    xxd

Consider setting your PATH so that /usr/local/bin
occurs before /usr/bin. Here is a one-liner:
    echo export PATH='/usr/local/bin:$PATH' >> ~/.bash_profile

La raison pour laquelle je ne fais pas passer les outils de brew en premier, en fait, pas du tout, est que les commandes brew installées ls et tar ne gèrent pas correctement l'ACL du système de fichiers, en fait, la dernière fois que j'ai vérifié (c'était la semaine dernière), ils n'étaient pas du tout gérés. C'est un GRAND problème, et pour l'éviter complètement, ainsi que le problème de configuration de la page man qui y est associé et qui marque le réglage de la $PATH, je m'assure de mettre les outils liés à OSX, en particulier ceux qui se trouvent dans /bin et /usr/bin, en premier.

Une autre raison pour laquelle je ne mets même pas /usr/local/bin sur mon chemin est que brew ne joue pas bien avec les autres, et que fink et port (MacPorts) ont beaucoup plus de paquets supportés actuellement que j'ai besoin de NOW. Par exemple, je peux obtenir gnome-terminal avec fink, mais ce serait un gros effort de construire une formule et de faire la même chose avec brew. Donc, je garde /sw et /opt dans ma recherche $PATH (pour fink et port, respectivement) et je référence les choses dont j'ai besoin à partir de /usr/local/bin, y compris gnat, soit en toutes lettres, soit j'utilise bash alias, soit je source un fichier setup pour un environnement entièrement différent lorsque j'écris du code Ada.

Le truc, c'est que ça dépend vraiment de ce que vous voulez et de ce dont vous avez besoin à ce moment-là.

Voici un exemple du problème de l'ACL que j'ai mentionné plus haut.

Avec les outils OSX standard:

$ /bin/ls -le /var/root | head -7
total 24
drwx------+ 3 root wheel 102 May 28 2013 Desktop
 0: group:everyone deny delete
 1: user:_spotlight inherited allow list,search,readattr,readextattr,readsecurity,file_inherit,directory_inherit
drwx------+ 6 root wheel 204 Sep 19 14:22 Documents
 0: group:everyone deny delete
 1: user:_spotlight inherited allow list,search,readattr,readextattr,readsecurity,file_inherit,directory_inherit

et avec les outils brew installés:

$ /usr/local/bin/gls -le /var/root
/usr/local/bin/gls: invalid option -- 'e'
Try '/usr/local/bin/gls --help' for more information.

et

$ /usr/local/bin/gls --help | grep -i acl

Vous obtiendrez des résultats similaires avec tar et je ne connais pas beaucoup d'autres outils brew à la maison, mais qui peut se permettre d'avoir quelque chose qui tombe en panne 6 mois plus tard à cause d'un problème ACL !

4
4
4
2014-09-18 20:46:55 +0000

Il y a toute une série de bonnes réponses ici. Voici la mienne :

echo >> ~/.bashrc alias my="PATH=/usr/local/bin:$PATH"
. ~/.bashrc
my git --version # Brew's fancy git
git --version # Apple's old crusty git

vous évite de devoir créer un alias séparé pour chaque programme, et en bonus, il laisse les installations par défaut accessibles au cas où vous en auriez besoin.

fonctionne de la même manière si vous utilisez ZSH ; il suffit de remplacer bashrc par zshrc. Vous pouvez remplacer my par _ ou même @ pour économiser de la frappe.

2
2
2
2013-07-30 18:47:40 +0000

Au lieu de jouer avec le PATH (qui, dans mon histoire, revient me brûler des mois plus tard), j'ai ajouté un alias pour git dans mon répertoire d'alias personnalisés zsh (~/.zshrc/custom/git_alias.zsh).

alias git='/usr/local/bin/git'

0
0
0
2017-05-23 17:29:13 +0000

Vous pouvez lancer la commande suivante dans un terminal, elle ajoutera le répertoire home de brew + le /bin dans le PATH de votre fichier SHELL “rc” init (bash, zsh, csh)

echo "export PATH="'$PATH:$(brew --prefix)/bin' >> ~/.$(basename $SHELL)rc

Enjoy !

0
0
0
2014-03-21 11:54:36 +0000

Je préfère limiter les changements aux variables d'environnement comme $PATH aux utilisateurs qui veulent vraiment le changement. Ainsi, j'ajoute simplement ce qui suit à ~/.bashrc :

export PATH="$(brew --prefix)/bin:$PATH"