Comment configurer la variable PATH sur mon Mac afin que les outils installés par Homemw soient trouvés?

En essayant de configurer Homebrew sur un nouveau Mac (sur les Mac précédents, j'installais les paquetages à partir de la source).

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 dans /usr/bin/git qui est venu avec Lion (je pense?). Et pas celui dans /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 voir /usr/bin défaut avant /usr/local/bin dans $PATH

Alors, je suis confus! Je pensais que le point de HomeBrew (et quelque chose dont les créateurs semblent se vanter) était que vous ne devez pas utiliser la variable $PATH !?!

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

    J'ai trouvé cette publication connexe très utile. Au lieu de changer la variable $PATH , il vous suffit simplement d'éditer votre fichier /etc/paths .

    Homebrew veut que je modifie mon PATH; Pas d'indice comment

    Dès que j'ai suivi les instructions et mis /usr/local/bin ci /usr/bin dessus /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 vous l'avez demandé
    4. Vous verrez une liste de chemins. Modifiez-les de sorte que /usr/local/bin soit entré au-dessus du chemin /usr/bin
    5. *Sauvegarder et quitter
    6. Redémarrer le terminal

    Voici ce que ressemble le mien après que je l'ai fait:

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

    * Pour sauvegarder et quitter tapez deux points (:), tapez wq (pour écrire et quittez en même temps), suivi de Enter .

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

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

    Cette réponse est obsolète. La commande préférée de Homebrew PATH était autrefois expliquée, mais ce n'est plus vrai. Cependant, l'approche est plus généralement applicable, donc, pour l'intérêt, je la laisse tomber.


    Vous ne devriez pas.

    Homebrew conserve intentionnellement /usr/local/bin après /usr/bin dans le chemin d'accès pour une compatibilité maximale. Inverser l'ordre de ces répertoires dans PATH en éditant /etc/paths signifierait que tous les programmes du système, quelle que soit leur démarrage, auront la version Homebrew d'une commande. Mais certains peuvent spécifiquement s'attendre à la version d'Apple, ou tout simplement ne pas pouvoir utiliser une version plus récente, etc.

    Comment conserver ce principe et obtenir toujours la version installée par Homebrew de git ? Selon le discours, tous les problèmes peuvent être résolus avec une couche d'indirection (à l'exception d'avoir trop de couches d'indirection). – Ou dans ce cas, s'il se présente, deux couches.

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

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

    Cela vérifie si PATH contient ~/bin , et sinon, le prépare. Avec cela en place, alors la sélection sélective de la guitare gérée par Homebrew a priorité sur la version du système (au lieu de chaque binaire géré par Homebrew), et pour vos sessions shell (au lieu de tous les programmes démarrés à partir de n'importe où, y compris les programmes GUI) Est aussi simple que simuler:

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

    Vous pouvez /usr/local/Cellar/git/1.8.2.1/bin/git lien symbolique /usr/local/Cellar/git/1.8.2.1/bin/git directement, mais vous devriez réparer votre lien symbolique chaque fois que vous avez fait un brew upgrade git (directement ou indirectement). En liant symboliquement au lien symbolique de localisation fixe de Homebrew, vous ne devez pas vous en soucier.

    Donc, vous ajoutez un répertoire à votre $HOME afin que vous puissiez l'ajouter votre PATH afin que vous puissiez un lien symbolique vers un lien symbolique, ce qui corrige votre problème et met un sourire sur le Dr Seuss. Yo dawg Je tiens que vous aimez les liens symboliques, alors nous mettons un chemin dans votre PATH afin que vous puissiez lister un lien symbolique pendant votre lien symbolique.

    Vous n'avez rien fait de mal, mais il semble assez clair que si vous aviez /usr/local/bin dans 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 donc tout ce que Homebrew installe est trouvé en premier. C'est comme ça que je l'ai configuré sur mon Mac, et cela a fonctionné pour moi depuis longtemps, cependant, YMMV.

    Il semble qu'ils croient que cela fonctionnerait avec /usr/local/bin après /usr/bin , alors alors que je pourrais avoir creusé mon propre $PATH , je peux voir où manque leur documentation:

    Notez que vous devriez mettre /usr/local/bin après /usr/bin car certains programmes s'attendront à obtenir la version du système, par exemple, ruby ​​et break s'ils obtiennent la version Homebrew plus récente.

    De Discrepancy entre wiki & brew doctor # 10738 . Notez que ce document poursuit en disant: "La FAQ (la citation ci-dessus) se réfère au paramètre PATH pour les applications GUI; le médecin (le conseil à mettre /usr/local/bin avant /usr/bin dans votre PATH) se réfère Au paramètre PATH pour les applications CLI. "

    Je ne suis pas d'accord avec la réponse de jthomas. L'édition de votre fichier / etc / paths modifie les chemins de chargement pour tous les programmes. Cela pourrait être dangereux si une application système espère trouver une version spécifique d'un binaire mais trouve une version différente car vous avez modifié votre fichier de chemins. Au lieu de cela, modifiez votre variable de chemin dans ~ / .bashrc (ou ~ / .bash_profile). Ensuite, votre chemin de chargement ne changera que dans le terminal:

    # Ajouter l'application homebrew à PATH
    Export PATH = / chemin / à / homebrew / app / bin: $ PATH

    Ensuite, rechargez bash ou source ~/.bashrc , et vous êtes prêt à aller. Puisque le chemin homebrew vaut avant toute autre chose, bash va charger la version que vous avez téléchargée avec homebrew.

    Si je comprends bien, brew ne met rien dans /usr/local/bin qui collabore (a le même nom) qu'un exécutable réparti 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 collisions de nom. * Cependant, voyez les problèmes avec ls et tar , et en utilisant d'autres agrégateurs de paquets comme fink et port (MacPorts), la manière ci-dessous.

    Brew fait l'une des deux choses dont je sais que cela aide à gérer les collisions de noms:

    1. Brew laisse les fûts non liés dans la cave. Pour installer des trucs, préparer des outils où ils se trouvent, et créer des liens symboliques avec ces outils dans /usr/local/bin . Pour les outils qui ne brew pas une collision de nom, il ne crée pas de lien symbolique.
    2. Pour beaucoup, sinon tous les outils standard qui sont également dans /bin et /usr/bin , brew préfixe le lien dans /usr/local/bin avec un "g", donc par exemple pour exécuter un ls avec une version brew , Utilisez les gls . Il suffit de faire un ls -l dans /usr/local/bin et chercher les fichiers liés – ceux sont ceux qui se brew . Remarque: Les outils installés de brew installés par leurs noms réels se trouvent dans /usr/local/Cellar/coreutils/8.21/libexec/gnubin .

    Je ne met 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 un brew doctor et cherchez cette section – Voici la brew doctor d'intérêt du 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 met pas les outils de brew premier, en fait, pas du tout, c'est parce que les instructions ls et tar ls brew ne gèrent pas correctement le système de fichiers ACL, en fait, la dernière fois que j'ai vérifié (ce qui était la semaine dernière) , Ils n'étaient pas manipulés du tout . Il s'agit d'un problème GRAND, et pour éviter tout cela, ainsi que le problème associé à la configuration de la page man qui marquise avec le réglage du droit $PATH , je m'assure d'avoir mis les outils liés à OSX , en particulier ceux trouvés dans /bin et /usr/bin , d'abord.

    Une autre raison pour laquelle je ne place même pas /usr/local/bin sur mon chemin est que brew ne fonctionne pas bien avec les autres, et fink et port (MacPorts) ont beaucoup plus de paquets pris en charge actuellement que j'ai besoin MAINTENANT . Par exemple, je peux avoir gnome-terminal avec fink , mais ce serait un grand effort pour construire une formule et faire de même avec brew . Donc, je garde /sw et /opt dans ma recherche $PATH (pour fink et port , respectivement) et faites référence aux choses dont j'ai besoin à partir de /usr/local/bin , y compris le gnat , soit précisé, soit j'utilise les alias bash , Ou je crée un fichier d' setup pour un environnement complètement différent lorsque j'écris un code Ada .

    La chose est, cela dépend vraiment de ce que vous voulez et avez besoin à l'époque.

    Voici un exemple du problème ACL que j'ai mentionné ci-dessus.

    Avec les outils standard OSX :

     $ /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 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 du tar et je ne connais pas beaucoup d'autres outils de brew , mais qui peut se permettre de faire quelque chose se briser 6 mois sur la route en raison d'un problème ACL !

    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 permet de créer un alias distinct pour chaque programme et, en prime, il laisse les installations par défaut accessibles au cas où vous en aurez besoin.

    Fonctionne de la même manière si vous utilisez ZSH; Il suffit de basculer bashrc pour zshrc . Vous pouvez désactiver my _ ou même @ pour sauvegarder la saisie.

    Plutôt que de déranger le PATH (ce qui dans mon histoire revient pour me brûler des mois plus tard), j'ai ajouté un alias pour git dans mon répertoire d'alias personnalisé zsh (~ / .zshrc / custom / git_alias.zsh).

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

    Je préfère limiter les changements aux variables environnementales comme $PATH aux utilisateurs qui veulent réellement le changement. Ainsi, je ajoute simplement ce qui suit à ~/.bashrc :

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

    Vous pouvez émettre la commande suivante dans un terminal, il ajoutera le répertoire home brew + the / bin dans le PATH de votre tout fichier d'initialisation SHELL "rc" (bash, zsh, csh)

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

    Prendre plaisir !