Wie muss ich die PATH-Variable auf meinem Mac einstellen, damit die von Hombrew installierten Tools gefunden werden?

Wie muss ich die PATH-Variable auf meinem Mac einstellen, damit die von Hombrew installierten Tools gefunden werden?

Versuch der EinrichtungSelbstgebrautesauf einem neuen Mac (auf früheren Macs habe ich Pakete aus der Quelle installiert).

Das erste Paket, das ich zu installieren versuchte, war Git:

$ brew install git

Die Installation verlief einwandfrei, which gitzeigt aber immer noch die /usr/bin/gitmitgelieferteLöwe(glaube ich?). Und nicht das, /usr/local/bin/gitdas gerade eingebaut wurde.

$ 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

Wie Sie sehen, /usr/binist der Standardwert vorher /usr/local/binin$PATH

Also, ich bin verwirrt! Ich dachte, der Sinn vonStartseite(und etwas, womit die Entwickler zu prahlen scheinen) war, dass Sie nicht mit der Variable herumspielen müssen $PATH!?!

Also, was habe ich falsch gemacht?

Antwort1

Ich fand diesen verwandten Beitrag sehr hilfreich. Anstatt die $PATHVariable zu ändern, müssen Sie einfach Ihre /etc/pathsDatei bearbeiten.

Homebrew möchte, dass ich meinen PATH ändere; keine Ahnung wie

Sobald ich die /usr/local/binoben angegebenen Anweisungen befolgt hatte /usr/bin, waren meine Probleme gelöst.

  1. Öffnen Sie unter OS X Terminal
  2. Geben Sie den Befehl ein:sudo vi /etc/paths
  3. Geben Sie Ihr Passwort ein, wenn Sie danach gefragt werden
  4. Sie sehen eine Liste mit Pfaden. Bearbeiten Sie diese so, dass der Pfad über dem Pfad /usr/local/bineingegeben wird./usr/bin
  5. *Speichern und Beenden
  6. Terminal neu starten

So sieht meins aus, nachdem ich das getan habe:

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

*Um zu speichern und zu beenden, geben Sie einen Doppelpunkt ( :) ein, dann geben Sie wq(um gleichzeitig zu schreiben und zu beenden) ein, gefolgt von Enter.

Sie können die /etc/pathsDatei auch in einem grafischen Texteditor öffnen und auf diese Weise bearbeiten.

Gutschrift anfengd bei Stack Overflow für seine dortige Antwort.

Antwort2

Diese Antwort ist veraltet. Die bevorzugte Homebrew- PATHReihenfolge war früher wie erklärt, aber das stimmt nicht mehr. Der Ansatz ist jedoch allgemeiner anwendbar, daher lasse ich ihn aus Interesse stehen.


Das sollten Sie nicht.

Homebrew behält absichtlich/usr/local/bin nach /usr/binim Pfad für maximale Kompatibilität. Die Umkehrung der Reihenfolge dieser Verzeichnisse PATHdurch Bearbeiten /etc/pathswürde bedeuten, dassalleProgramme überall auf dem System, unabhängig davon, wie sie gestartet wurden, erhalten die Homebrew-Version eines Befehls. Einige erwarten jedoch möglicherweise ausdrücklich die Version von Apple oder können einfach keine neuere Version verwenden usw.

Wie kann dieses Prinzip beibehalten und trotzdem die Homebrew-installierte Version von erhalten werden git? Wie das Sprichwort sagt, können alle Probleme mit einer Indirektionsebene gelöst werden (außer, wenn man zu viele Indirektionsebenen hat). — Oder in diesem Fall, wie sich herausstellt, mit zwei Ebenen.

Insbesondere gehört es zu meinen Unix-Gewohnheiten, ein ~/binVerzeichnis zu haben, das ich an den Anfang meiner setze PATH. Dies ist einer der ersten Teile in meiner .bashrc:

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

Dies prüft, ob PATHenthält ~/bin, und wenn nicht, wird es vorangestellt. Wenn dies vorhanden ist, wird dann selektiv nur die von Homebrew verwaltete Version gitVorrang vor der Systemversion haben (anstattjedenHomebrew-verwaltete Binärdatei) und nur für Ihre Shell-Sitzungen (anstattalleProgramme, die von überall aus gestartet werden können (einschließlich GUI-Programme), ist so einfach wie das Erstellen eines symbolischen Links:

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

DukönnteSymlink /usr/local/Cellar/git/1.8.2.1/bin/gitdirekt, aber dann müssten Sie Ihren Symlink jedes Mal korrigieren, wenn Sie dies tun brew upgrade git(direkt oder indirekt). Wenn Sie auf Homebrews Symlink mit festem Standort verweisen, müssen Sie sich darüber keine Gedanken machen.

Sie fügen also ein Verzeichnis zu Ihrem hinzu $HOME, damit Sie es Ihrem hinzufügen können, PATHdamit Sie einen symbolischen Link zu einem symbolischen Link erstellen können, und das behebt Ihr Problem und zaubert Dr. Seuss ein Lächeln ins Gesicht. Yo, Kumpel, ich habe gehört, dass Sie symbolische Links mögen, also haben wir einen Pfad in Ihrem angelegt, PATHdamit Sie einen symbolischen Link erstellen können, während Sie einen symbolischen Link erstellen.

Antwort3

Sie haben nichts falsch gemacht, aber es scheint ziemlich klar, dass dieses spezielle Problem behoben wäre, wenn Sie es /usr/local/binvorher in Ihren Pfad aufgenommen hätten /usr/bin. Die einfachste Lösung besteht darin, genau das zu tun und etwas wie

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

in Ihrem, ~/.bash_profiledamit alles, was Homebrew installiert, zuerst gefunden wird. So habe ich es auf meinem Mac eingerichtet und es hat bei mir so lange funktioniert, aber Ihre Erfahrung kann abweichen.

Es scheint, dass sie glauben, es würde funktionieren, wenn /usr/local/binmannach /usr/bin, also auch wenn ich meine eigene vermasselt habe $PATH, erkenne ich die Mängel in ihrer Dokumentation:

Beachten Sie, dass Sie „ /usr/local/binnach“ einfügen sollten /usr/bin , da manche Programme die Systemversion von z. B. Ruby erwarten und bei der neueren Homebrew-Version abbrechen.

AusDiskrepanz zwischen Wiki und Brew Doctor #10738. Beachten Sie, dass in diesem Dokument weiter steht: „Die FAQ (das obige Zitat) beziehen sich auf die PATH-Einstellung für GUI-Apps; der Doctor (der Ratschlag, den Sie in Ihrem PATH /usr/local/binvoranstellen sollten /usr/bin ) bezieht sich auf die PATH-Einstellung für CLI-Apps.“

Antwort4

So wie ich es verstehe, brewfügt nichts ein, /usr/local/bindas mit einer verteilten ausführbaren Datei von Apple kollidiert (den gleichen Namen hat). Daher sollte es kein Problem sein, wenn /usr/local/binim Pfad vor /binund steht /usr/bin, da es keine Namenskollisionen geben sollte. *Siehe jedoch die Probleme mit lsund tarund der Verwendung anderer Paketaggregatoren wie finkund port(MacPorts) weiter unten.

Brewtut eines von zwei Dingen, von denen ich weiß, dass sie beim Verwalten von Namenskollisionen helfen:

  1. Brewlässt nicht verbundene Fässer im Keller. Um Dinge zu installieren, lässt brew die Tools dort, wo sie sind, und erstellt symbolische Links zu diesen Tools in /usr/local/bin. Für Tools, brewmit denen keine Namenskollision auftreten soll, wird kein symbolischer Link erstellt.
  2. Bei vielen (wenn nicht allen) Standardtools, die auch in /binund enthalten sind /usr/bin, brewwird dem Link in /usr/local/binein „g“ vorangestellt. Um beispielsweise eine lsmit einer Brew-Version auszuführen, verwenden Sie gls. Machen Sie einfach einen ls -lin /usr/local/binund suchen Sie nach den verknüpften Dateien - das sind die, die brewdort abgelegt sind. Hinweis: Die brewinstallierten Tools, auf die mit ihren richtigen Namen zugegriffen werden muss, finden Sie in /usr/local/Cellar/coreutils/8.21/libexec/gnubin.

Ich stelle es mir aus zwei Gründen nicht /usr/local/binin den Weg – diese Gründe stehen am Ende meiner Antwort.

Um die Namenskollisionen in Ihrem System zu ermitteln, verwenden brew doctorund suchen Sie nach diesem Abschnitt. Hier ist die brew doctorAusgabe von , die von Interesse ist:

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

Der Grund, warum ich die Tools von nicht an die erste Stelle setze brew, eigentlich überhaupt nicht, ist, dass die brewinstallierten lsund tarBefehle die Dateisystem-ACL nicht richtig handhaben. Tatsächlich, als ich das letzte Mal nachgesehen habe (das war letzte Woche),sie wurden überhaupt nicht behandelt. Dies ist ein GROSSES Problem und um es sowie das damit verbundene manSeitenkonfigurationsproblem, das mit der $PATHrichtigen Einstellung einhergeht, vollständig zu vermeiden, stelle ich sicher, dass ich die OSXzugehörigen Tools, insbesondere diejenigen, die in /binund zu finden sind /usr/bin, an die erste Stelle setze.

/usr/local/binEin weiterer Grund, warum ich meinen Pfad überhaupt nicht einfüge, ist brew, dass er nicht gut mit anderen zusammenarbeitet und fink( portMacPorts) derzeit viel mehr unterstützte Pakete hat, als ich braucheJETZT. Ich komme zum Beispiel gnome-terminalmit klar fink, aber es wäre ein großer Aufwand, eine Formel zu konstruieren und dasselbe mit zu tun brew. Ich behalte also /swund /optbei meiner Suche bei $PATH(für finkbzw. port) und verweise auf Dinge, die ich von brauche /usr/local/bin, einschließlich gnat, entweder ausgeschrieben, oder ich verwende bash alias's, oder ich verwende eine setupDatei als Quelle für eine völlig andere Umgebung, wenn ich AdaCode schreibe.

Der Punkt ist, dass es wirklich davon abhängt, was Sie gerade wollen und brauchen.

Hier ist ein Beispiel für das ACL-Problem, das ich oben erwähnt habe.

Mit den Standardwerkzeugen 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

und mit den brewinstallierten Tools:

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

Und

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

tarMit (ich kenne nicht viele) anderen Werkzeugen erzielen Sie ähnliche Ergebnisse brew, aber wer kann es sich leisten, dass nach sechs Monaten aufgrund eines Problems etwas kaputtgeht ACL!

verwandte Informationen