So wie ich es verstehe, wird in brew nichts abgelegt, das mit einer von Apple verteilten ausführbaren Datei kollidiert (den gleichen Namen hat). Daher sollte es kein Problem sein, /usr/local/bin im Pfad vor /usr/local/bin und /bin zu haben, da es keine Namenskollisionen geben sollte. *Siehe jedoch die Probleme mit /usr/bin und ls und der Verwendung anderer Paketaggregatoren wie tar und fink (MacPorts), weiter unten.
port macht eine von zwei Sachen, von denen ich weiß, dass sie helfen, Namenskollisionen zu verwalten:
Brew lässt unverknüpfte Fässer im Keller. Um Sachen zu installieren, lässt brew die Tools dort, wo sie sind, und erstellt symbolische Links zu diesen Tools in Brew. Für Werkzeuge, mit denen /usr/local/bin keine Namenskollision wünscht, legt es keinen symbolischen Link an.
- Für viele, wenn nicht alle der Standardwerkzeuge, die auch in
brew und /bin enthalten sind, stellt /usr/bin dem Link in brew ein “g” voran. Um also z. B. ein /usr/local/bin mit einer Brau-Version durchzuführen, verwenden Sie ls. Führen Sie einfach ein gls in ls -l aus und suchen Sie nach den verlinkten Dateien - das sind die, die /usr/local/bin dort abgelegt hat. Hinweis: Die von brew installierten Tools, auf die mit ihrem richtigen Namen zugegriffen werden muss, befinden sich in brew.
Ich nehme /usr/local/Cellar/coreutils/8.21/libexec/gnubin aus zwei Gründen nicht in meinen Pfad auf - diese Gründe stehen unten in meiner Antwort.
Um die Namenskollisionen in Ihrem System zu beurteilen, verwenden Sie /usr/local/bin und suchen Sie nach diesem Abschnitt - hier ist die Ausgabe von brew doctor von Interesse:
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 Werkzeuge von brew doctor nicht an die erste Stelle setze, eigentlich überhaupt nicht, ist, dass die Befehle brew installiert brew und ls die Dateisystem-ACL nicht richtig behandeln, tatsächlich, als ich das letzte Mal nachgesehen habe (was letzte Woche war), wurden sie überhaupt nicht behandelt. Das ist ein GROSSES Problem, und um es ganz zu vermeiden, zusammen mit dem damit verbundenen Problem der tar-Seitenkonfiguration, das mit der richtigen Einstellung der man einhergeht, stelle ich sicher, dass ich die $PATH-bezogenen Werkzeuge, insbesondere die in OSX und /bin, zuerst einsetze.
Ein weiterer Grund, warum ich /usr/bin überhaupt nicht in meinen Pfad aufnehme, ist, dass /usr/local/bin nicht gut mit anderen zusammenspielt und brew und fink (MacPorts) derzeit viel mehr unterstützte Pakete haben, die ich JETZT brauche. Zum Beispiel kann ich port mit gnome-terminal bekommen, aber es wäre ein großer Aufwand, eine Formel zu konstruieren und das gleiche mit fink zu tun. Also behalte ich brew und /sw in meiner Suche /opt (für $PATH bzw. fink) und referenziere Dinge, die ich von port benötige, einschließlich /usr/local/bin, entweder buchstabiert, oder ich verwende gnat bash‘s, oder ich source eine alias-Datei für eine ganz andere Umgebung, wenn ich setup-Code schreibe.
Die Sache ist die, dass es wirklich davon abhängt, was Sie zu diesem Zeitpunkt wollen und brauchen.
Hier ist ein Beispiel für das ACL-Problem, das ich oben erwähnt habe.
Mit den standardmäßigen Ada-Tools:
$ /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 installierten OSX-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
Sie erhalten ähnliche Ergebnisse mit brew und ich kenne nicht viele andere tar-Tools zu Hause, aber wer kann es sich leisten, dass etwas nach 6 Monaten wegen eines brew-Problems kaputt geht!