Beim Versuch, Homebrew auf einem neuen Mac einzurichten (auf früheren Macs installierte ich Pakete aus dem Quellcode).
Das erste Paket, das ich installieren wollte, war Git:
$ brew install git
Die Installation ging in Ordnung, which git
zeigt aber immer noch die /usr/bin/git
, die mit Lion geliefert wurde (glaube ich?). Und nicht der /usr/local/bin/git
, der gerade installiert 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 können, sind die /usr/bin
Standardeinstellungen /usr/local/bin
in der$PATH
Also bin ich verwirrt! Ich dachte, der Sinn von HomeBrew (und etwas, womit die Schöpfer zu prahlen scheinen) ist, dass Sie sich nicht mit der $PATH
Variablen anlegen müssen !?!
Also, was habe ich falsch gemacht?
If you choose /usr/local, everything 'just works!'
dass ich mich fragen muss, was ich vermisse ... weil es nicht "nur funktioniert".Antworten:
Ich fand diesen verwandten Beitrag sehr hilfreich. Anstatt die
$PATH
Variable zu ändern , müssen Sie lediglich Ihre/etc/paths
Datei bearbeiten .Homebrew möchte, dass ich meinen PFAD ändere. keine ahnung wie
Sobald ich den Anweisungen gefolgt und
/usr/local/bin
oben angegeben hatte/usr/bin
, waren meine Probleme gelöst.sudo vi /etc/paths
/usr/local/bin
Pfad über dem/usr/bin
Pfad eingegeben wirdSo sieht meins aus, nachdem ich das getan habe:
* Um zu speichern und zu beenden, geben Sie einen Doppelpunkt (
:
) ein und dannwq
(um gleichzeitig zu schreiben und zu beenden), gefolgt von Enter.Sie können die
/etc/paths
Datei auch in einem grafischen Texteditor öffnen und auf diese Weise bearbeiten.Kredit fengd für seine Antwort auf Stack - Überlauf über drüben.
quelle
path_helper
und/etc/paths.d
.Diese Antwort ist veraltet. Die bevorzugte Homebrew-
PATH
Reihenfolge 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 hält sich absichtlich
/usr/local/bin
nach/usr/bin
im Weg für maximale Kompatibilität. Das Umkehren der Reihenfolge dieser VerzeichnissePATH
durch Bearbeiten/etc/paths
würde bedeuten, dass alle Programme auf dem gesamten System, unabhängig davon, wie sie gestartet wurden, die Homebrew-Version eines Befehls erhalten. Einige können jedoch speziell die Apple-Version erwarten oder einfach keine neuere Version verwenden.Wie kann man dieses Prinzip beibehalten und trotzdem die von Homebrew installierte Version von erhalten
git
? 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 gehörte es zu meinen Unix-Gewohnheiten, ein
~/bin
Verzeichnis zu haben, das ich am Anfang meines Verzeichnisses anbrachtePATH
. Dies ist einer der ersten Punkte in meinem.bashrc
:Dies prüft, ob es
PATH
enthält~/bin
und wenn nicht, stellt es es voran. Wenn diese Option aktiviert ist, hat esgit
Vorrang vor der Systemversion (anstelle aller von Homebrew verwalteten Binärdateien) und nur für Ihre Shell-Sitzungen (anstelle aller Programme, die von einem beliebigen Ort gestartet wurden, einschließlich GUI-Programmen) So einfach wie das Verknüpfen:Sie könnten einen Symlink
/usr/local/Cellar/git/1.8.2.1/bin/git
direkt erstellen , müssen dann aber jedes Malbrew upgrade git
(direkt oder indirekt) einen Symlink korrigieren . Wenn Sie einen Symlink zu Homebrews ortsfesten Symlink erstellen, müssen Sie sich darüber keine Gedanken machen.Sie fügen also ein Verzeichnis zu Ihrem hinzu,
$HOME
damit Sie es hinzufügen und einenPATH
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 deinen,PATH
damit du symlinken kannst, während du symlinkst.quelle
ln
Befehl haben. Der erste Pfad ist das Ziel und der zweite der Symlinkexport PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"
Sie haben nichts falsch gemacht, aber es scheint ziemlich klar zu sein, dass dieses spezielle Problem verschwinden würde , wenn Sie sich
/usr/local/bin
auf Ihrem Weg befinden/usr/bin
würden. Die einfachste Lösung ist, genau das zu tun und so etwas zu formulierenin deinem
~/.bash_profile
so wird alles, was Homebrew installiert, zuerst gefunden. 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 es mit funktionieren würde, glauben zu
/usr/local/bin
sein , nachdem/usr/bin
, also , während ich meine eigene up muckte haben könnte$PATH
, kann ich sehen , wo ihre Dokumentation fehlt:Aus der Diskrepanz zwischen wiki & brew doctor # 10738 . Beachten Sie, dass dieses Dokument weiter sagt : „Die FAQ (das obige Zitat) bezieht sich auf die PATH - Einstellung für GUI - Anwendungen, der Arzt (die Beratung setzt
/usr/local/bin
voraus/usr/bin
. In PATH) bezieht sich auf den Pfad für CLI - Anwendungen einstellen“quelle
/usr/local/bin
s in meinem$PATH
? Ich glaube schon Ich frage mich, ob wir stattdessen die Reihenfolge der Standardpfade in/etc/paths
oder den Inhalt von bearbeiten sollten/etc/paths.d
. Aber das wird jeden Benutzer betreffen ... vielleicht keine schlechte Sache. Wie auch immer, ich wollte nur sehen, wie andere Leute das angegangen sind.PATH
(in der Art und Weise Ihrer Wahl) haben/usr/local/bin
precede/usr/bin
. Ich persönlich aktualisiere meinPATH
in.bash_profile
wie hier vorgeschlagen./usr/local/bin
, obwohl sie/usr/bin
im Pfad verlaufen. Aber GUI-Apps brauchen spezielle Coddling? Es scheint, dass alle Apps, ob GUI oder nicht, die $ PATH-Variable anpassen müssen. Also, was vermisse ich (oder die Homebrew-Schöpfer)?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:
Laden Sie dann bash oder neu
source ~/.bashrc
und Sie können loslegen. Da der Homebrew-Pfad vor allem anderen steht, lädt bash die Version, die Sie mit Homebrew heruntergeladen haben.quelle
.bashrc
standardmäßig nicht geladen. Beschaffen Sie es manuell?.bashrc
beziehe ich sie von meiner.bash_profile
. Wenn Sie die RC-Datei nicht erstellen möchten, können Sie den Befehl zu Ihrer hinzufügen.bash_profile
.Soweit ich
brew
weiß/usr/local/bin
, kollidiert (hat den gleichen Namen wie) nichts in einer von Apple verteilten ausführbaren Datei. Daher sollte das/usr/local/bin
im Weg haben/bin
und/usr/bin
kein Thema sein, da es keine Namenskollisionen geben sollte. * Beachten Sie jedoch die Probleme mitls
undtar
und die Verwendung anderer Paketaggregatoren wiefink
undport
(MacPorts) weiter unten.Brew
Hat eines von zwei Dingen, die mir bekannt sind, dazu beigetragen, Namenskollisionen zu verwalten:Brew
Lässt nicht verbundene Fässer im Keller. Um etwas zu installieren, belässt brew die Werkzeuge an ihrem Platz und erstellt symbolische Verknüpfungen zu diesen Werkzeugen in/usr/local/bin
. Für Tools, mit denenbrew
keine Namenskollision auftreten soll, wird keine symbolische Verknüpfung erstellt./bin
und befinden/usr/bin
, wirdbrew
der Link/usr/local/bin
mit einem "g" vorangestellt, um beispielsweise einels
mit einem Sud durchzuführende Version zu verwendengls
. Einfach tun , um einels -l
in/usr/local/bin
der verknüpften Dateien und finden - diejenigen , die sindbrew
dort setzen. Hinweis: Diebrew
installierten Tools, auf die mit ihren tatsächlichen Namen zugegriffen werden muss, befinden sich in/usr/local/Cellar/coreutils/8.21/libexec/gnubin
.Ich gehe
/usr/local/bin
aus zwei Gründen keinen Weg - diese Gründe stehen am Ende meiner Antwort.Um die Namenskollisionen in Ihrem System, die Verwendung zu bewerten
brew doctor
und zu diesem Abschnitt finden - Hier ist diebrew doctor
‚s Ausgabe von Interesse:Der Grund, warum ich die
brew
Tools nicht an erster Stelle stelle , ist, dass diebrew
installiertels
und dietar
Befehle die Dateisystem-ACL nicht richtig handhaben. überhaupt nicht gehandhabt . Dies ist ein GROSSES Problem, und um es zusammen mit dem damit verbundenen Problem derman
Seitenkonfiguration, das mit dem Festlegen der$PATH
richtigen Tags einhergeht, zu vermeiden , stelle ich sicher, dass dieOSX
zugehörigen Tools, insbesondere die in/bin
und enthaltenen/usr/bin
, an erster Stelle stehen.Ein weiterer Grund, warum ich mich überhaupt nicht
/usr/local/bin
in den Weg gestellt habe, ist, dass ichbrew
nicht gut mit anderen zusammen spielefink
undport
(MacPorts) derzeit weitaus mehr unterstützte Pakete habe, die ich JETZT brauche . Zum Beispiel kann ichgnome-terminal
mitfink
, aber es wäre eine große Anstrengung sein mit einer Formel und das gleiche tun zu konstruierenbrew
. Also, ich halte/sw
und/opt
bei meiner Suche$PATH
(fürfink
undport
, respectively) und Referenz Dinge , die ich aus/usr/local/bin
, einschließlichgnat
, entweder buchstabierte, oder ichbash
alias
‚s, oder ich eine Quelle -setup
Datei für eine ganz andere Umgebung , wenn ich schreibeAda
Code.Die Sache ist, es hängt wirklich davon ab, was Sie zu der Zeit wollen und brauchen.
Hier ist ein Beispiel für das oben erwähnte ACL-Problem.
Mit den Standardwerkzeugen
OSX
:und mit den
brew
installierten Tools:und
Sie erhalten ähnliche Ergebnisse mit
tar
und ich kenne nicht viele anderebrew
Tools, aber wer kann es sich leisten, dass 6 Monate später etwas kaputt geht, wegen einesACL
Problems!quelle
Hier gibt es eine ganze Reihe guter Antworten. Hier ist meins:
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. einfach ausschalten
bashrc
fürzshrc
. Sie könnenmy
für_
oder sogar umschalten,@
um beim Tippen zu sparen.quelle
Anstatt überhaupt mit dem Pfad herumzuspielen (der in meiner Geschichte Monate später wieder auftaucht), habe ich einen Alias für Git in mein benutzerdefiniertes Alias-Verzeichnis von zsh (~ / .zshrc / custom / git_alias.zsh) eingefügt.
alias git='/usr/local/bin/git'
quelle
Ich bevorzuge es, Änderungen auf Umgebungsvariablen zu beschränken, wie dies
$PATH
bei Benutzern der Fall ist, die die Änderung tatsächlich möchten. Daher füge ich einfach Folgendes hinzu~/.bashrc
:quelle
Sie können den folgenden Befehl in einem Terminal ausführen, der das Ausgangsverzeichnis für das Brühen + das / bin im PATH der SHELL-Init-Datei "rc" (bash, zsh, csh) hinzufügt.
echo "export PATH="'$PATH:$(brew --prefix)/bin' >> ~/.$(basename $SHELL)rc
Genießen !
quelle