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 git
zeigt aber immer noch die /usr/bin/git
mitgelieferteLöwe(glaube ich?). Und nicht das, /usr/local/bin/git
das 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/bin
ist der Standardwert vorher /usr/local/bin
in$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 $PATH
Variable zu ändern, müssen Sie einfach Ihre /etc/paths
Datei bearbeiten.
Homebrew möchte, dass ich meinen PATH ändere; keine Ahnung wie
Sobald ich die /usr/local/bin
oben angegebenen Anweisungen befolgt hatte /usr/bin
, waren meine Probleme gelöst.
- Öffnen Sie unter OS X Terminal
- Geben Sie den Befehl ein:
sudo vi /etc/paths
- Geben Sie Ihr Passwort ein, wenn Sie danach gefragt werden
- Sie sehen eine Liste mit Pfaden. Bearbeiten Sie diese so, dass der Pfad über dem Pfad
/usr/local/bin
eingegeben wird./usr/bin
- *Speichern und Beenden
- 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/paths
Datei 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- PATH
Reihenfolge 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/bin
im Pfad für maximale Kompatibilität. Die Umkehrung der Reihenfolge dieser Verzeichnisse PATH
durch Bearbeiten /etc/paths
wü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 ~/bin
Verzeichnis 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 PATH
enthält ~/bin
, und wenn nicht, wird es vorangestellt. Wenn dies vorhanden ist, wird dann selektiv nur die von Homebrew verwaltete Version git
Vorrang 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/git
direkt, 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, PATH
damit 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, PATH
damit 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/bin
vorher 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_profile
damit 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/bin
mannach /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/bin
nach“ 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/bin
voranstellen sollten /usr/bin
) bezieht sich auf die PATH-Einstellung für CLI-Apps.“
Antwort4
So wie ich es verstehe, brew
fügt nichts ein, /usr/local/bin
das mit einer verteilten ausführbaren Datei von Apple kollidiert (den gleichen Namen hat). Daher sollte es kein Problem sein, wenn /usr/local/bin
im Pfad vor /bin
und steht /usr/bin
, da es keine Namenskollisionen geben sollte. *Siehe jedoch die Probleme mit ls
und tar
und der Verwendung anderer Paketaggregatoren wie fink
und port
(MacPorts) weiter unten.
Brew
tut eines von zwei Dingen, von denen ich weiß, dass sie beim Verwalten von Namenskollisionen helfen:
Brew
lä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,brew
mit denen keine Namenskollision auftreten soll, wird kein symbolischer Link erstellt.- Bei vielen (wenn nicht allen) Standardtools, die auch in
/bin
und enthalten sind/usr/bin
,brew
wird dem Link in/usr/local/bin
ein „g“ vorangestellt. Um beispielsweise einels
mit einer Brew-Version auszuführen, verwenden Siegls
. Machen Sie einfach einenls -l
in/usr/local/bin
und suchen Sie nach den verknüpften Dateien - das sind die, diebrew
dort abgelegt sind. Hinweis: Diebrew
installierten 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/bin
in den Weg – diese Gründe stehen am Ende meiner Antwort.
Um die Namenskollisionen in Ihrem System zu ermitteln, verwenden brew doctor
und suchen Sie nach diesem Abschnitt. Hier ist die brew doctor
Ausgabe 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 brew
installierten ls
und tar
Befehle 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 man
Seitenkonfigurationsproblem, das mit der $PATH
richtigen Einstellung einhergeht, vollständig zu vermeiden, stelle ich sicher, dass ich die OSX
zugehörigen Tools, insbesondere diejenigen, die in /bin
und zu finden sind /usr/bin
, an die erste Stelle setze.
/usr/local/bin
Ein weiterer Grund, warum ich meinen Pfad überhaupt nicht einfüge, ist brew
, dass er nicht gut mit anderen zusammenarbeitet und fink
( port
MacPorts) derzeit viel mehr unterstützte Pakete hat, als ich braucheJETZT. Ich komme zum Beispiel gnome-terminal
mit klar fink
, aber es wäre ein großer Aufwand, eine Formel zu konstruieren und dasselbe mit zu tun brew
. Ich behalte also /sw
und /opt
bei meiner Suche bei $PATH
(für fink
bzw. 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 setup
Datei als Quelle für eine völlig andere Umgebung, wenn ich Ada
Code 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 brew
installierten 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
tar
Mit (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
!