it-swarm.com.de

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

Der Versuch, Homebrew auf einem neuen Mac einzurichten (auf früheren Macs würde ich Pakete von der Quelle installieren).

Das erste Paket, das ich installieren wollte, war Git:

$ brew install git

Die Installation ging in Ordnung, aber which git zeigt immer noch den Code in /usr/bin/git an, der mit Lion geliefert wurde (glaube ich?). Und nicht der in /usr/local/bin/git, der gerade installiert wurde.

$ echo $PATH
/Users/meltemi/.rvm/gems/[email protected]/bin:/Users/meltemi/.rvm/gems/[email protected]/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, wird /usr/bin standardmäßig vor /usr/local/bin im $PATH angezeigt.

Also bin ich verwirrt! Ich dachte, der Punkt von HomeBrew (und etwas, mit dem die Schöpfer zu prahlen scheinen) war, dass Sie sich nicht mit der Variablen $PATH anlegen müssen!?!

Also, was habe ich falsch gemacht?

83
Meltemi

Ich fand diesen verwandten Beitrag sehr hilfreich. Anstatt die Variable $PATH zu ändern, müssen Sie lediglich Ihre Datei /etc/paths bearbeiten.

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

Sobald ich den Anweisungen gefolgt und /usr/local/bin über /usr/bin gesetzt hatte, wurden meine Probleme behoben.

  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 der Pfade. Bearbeiten Sie sie so, dass der Pfad /usr/local/bin über dem Pfad /usr/bin eingegeben wird
  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, und geben Sie dann wq ein (um gleichzeitig zu schreiben und zu beenden), gefolgt von Enter.

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

Dank an fengd bei Stack Overflow für seine Antwort dort drüben.

76
jthomas

Diese Antwort ist veraltet. Die bevorzugte Homebrew-Reihenfolge PATH war früher wie beschrieben, aber das stimmt nicht mehr. Der Ansatz ist jedoch allgemeiner anwendbar. Aus Gründen des Interesses lasse ich ihn daher offen.


Das solltest du nicht.

Homebrew speichert /usr/local/bin after /usr/bin absichtlich im Pfad, um maximale Kompatibilität zu gewährleisten. Das Umkehren der Reihenfolge dieser Verzeichnisse in PATH durch Bearbeiten von /etc/paths würde bedeuten, dass all Programme an einer beliebigen Stelle im System, unabhängig davon, wie sie gestartet wurden, die Homebrew-Version eines Befehls erhalten. Einige erwarten jedoch möglicherweise die Apple-Version oder können eine neuere Version nicht verwenden.

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

Insbesondere war es Teil meiner Unix-Gewohnheiten, ein ~/bin -Verzeichnis zu haben, das ich am Anfang meines PATH -Verzeichnisses eingefügt habe. Dies ist eines der ersten Bits in meinem .bashrc:

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

Hiermit wird überprüft, ob PATH~/bin enthält, und falls nicht, wird dieser vorangestellt. Wenn diese Option aktiviert ist, wird nur für die von Homebrew verwalteten git -Programme der Vorrang vor der Systemversion (anstelle von alle von Homebrew verwalteten Binärdateien) und nur für Ihre Shell-Sitzungen (anstelle von alle Programme gestartet von überall, einschließlich GUI-Programmen), ist so einfach wie das Verknüpfen:

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

Sie könnten symlinken /usr/local/Cellar/git/1.8.2.1/bin/git direkt, aber dann müssten Sie Ihren symlink jedes Mal reparieren, wenn Sie einen brew upgrade git (direkt oder indirekt) gemacht haben. Wenn Sie einen Symlink zu Homebrews ortsfesten Symlink erstellen, müssen Sie sich keine Sorgen machen.

Sie fügen also ein Verzeichnis zu Ihrem $HOME hinzu, damit Sie es zu Ihrem PATH hinzufügen können, damit Sie einen Symlink zu einem Symlink erstellen können. Dies behebt Ihr Problem und zaubert Dr. Seuss ein Lächeln auf den Lippen. Yo dawg ich hüte dich wie symlinks, also setzen wir einen Pfad in dein PATH, damit du symlinken kannst, während du symlinkst.

29

Sie haben nichts falsch gemacht, aber es scheint ziemlich klar, dass, wenn Sie /usr/local/bin in Ihrem Pfad vor /usr/bin hätten, dieses spezifische Problem wegfallen würde. Die einfachste Lösung ist, genau das zu tun und so etwas zu formulieren

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

in deinem ~/.bash_profile ist also alles, was Homebrew installiert, zuerst zu finden. Auf diese Weise habe ich es auf meinem Mac eingerichtet, und es hat für mich so lange funktioniert, jedoch YMMV.

Es scheint, dass sie glauben, es würde funktionieren, wenn /usr/local/bin after /usr/bin ist. Während ich also meinen eigenen $PATH durcheinandergebracht habe, kann ich sehen, wo ihre Dokumentation fehlt:

Beachten Sie, dass Sie /usr/local/bin nach /usr/bin setzen sollten, da einige Programme erwarten, dass sie die Systemversion von z. B. Ruby erhalten und brechen, wenn sie die neuere Homebrew-Version erhalten.

Von Diskrepanz zwischen Wiki & Brew Doctor # 10738 . In diesem Dokument heißt es weiter: "Die FAQ (das obige Zitat) bezieht sich auf die PATH-Einstellung für GUI-Apps. Der Arzt (der Hinweis, /usr/local/bin vor /usr/bin in Ihren PATH zu setzen) bezieht sich auf die PATH-Einstellung für CLI-Apps. "

17
Nick Klauer

Ich bin mit der Antwort von Thomas nicht einverstanden. Durch Bearbeiten der Datei/etc/arrows werden die Ladepfade für alle Programme geändert. Dies kann gefährlich sein, wenn eine Systemanwendung erwartet, eine bestimmte Version einer Binärdatei zu finden, aber eine andere Version findet, weil Sie Ihre Pfaddatei bearbeitet haben. Ändern Sie stattdessen Ihre Pfadvariable in ~/.bashrc (oder ~/.bash_profile). Dann ändert sich Ihr Ladeweg nur innerhalb des Terminals:

# Hinzufügen einer Homebrew-App zu PATH
export PATH =/path/to/homebrew/app/bin: $ PATH

Dann lade bash oder source ~/.bashrc neu und du kannst loslegen. Da der Homebrew-Pfad vor allem anderen steht, lädt bash die Version, die Sie mit Homebrew heruntergeladen haben.

6
Nathan

Hier gibt es eine ganze Reihe guter Antworten. Hier ist meins:

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

Sie müssen nicht für jedes Programm einen eigenen Alias ​​erstellen, und als Bonus bleiben die Standardinstallationen für den Fall, dass Sie sie benötigen, verfügbar.

Funktioniert genauso, wenn Sie ZSH verwenden. schalte einfach bashrc für zshrc aus. Sie können my für _ oder sogar @ ausschalten, um beim Tippen zu sparen.

4
Cheezmeister

Anstatt überhaupt mit dem Pfad herumzuspielen (der in meiner Geschichte Monate später auftaucht und mich verbrennt), habe ich einen Alias ​​für Git in mein benutzerdefiniertes zsh-Aliase-Verzeichnis (~/.zshrc/custom/git_alias.zsh) eingefügt.

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

2
Jesse Smith

Ich bevorzuge es, Änderungen auf Umgebungsvariablen wie $PATH auf Benutzer zu beschränken, die die Änderung tatsächlich möchten. Daher füge ich einfach Folgendes zu ~/.bashrc hinzu:

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

Sie können den folgenden Befehl in einem Terminal ausgeben, er fügt das Ausgangsverzeichnis für das Brühen + das/bin im PFAD Ihrer beliebigen Shell "rc" -Initialisierungsdatei (bash, zsh, csh) hinzu.

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

Genießen !

0
Vincent DAGOURY