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!