Jak rozumiem, brew nie umieszcza niczego w /usr/local/bin, co koliduje (ma taką samą nazwę jak) dystrybuowane przez Apple pliki wykonywalne. Dlatego posiadanie /usr/local/bin w ścieżce przed /bin i /usr/bin nie powinno być problemem, ponieważ nie powinno być żadnych kolizji nazw. *Jednakże, zobacz problemy z ls i tar, oraz używanie innych agregatorów pakietów, takich jak fink i port (MacPorts), poniżej.
Brew robi jedną z dwóch rzeczy, o których wiem, że pomagają zarządzać kolizjami nazw:
- **Aby zainstalować rzeczy, brew pozostawia narzędzia tam, gdzie są, i tworzy dowiązania symboliczne do tych narzędzi w
Brew. Dla narzędzi, z którymi /usr/local/bin nie chce mieć kolizji nazw, nie tworzy dowiązania symbolicznego.
- W przypadku wielu, jeśli nie wszystkich, standardowych narzędzi, które są również w
brew i /bin, /usr/bin poprzedza dowiązanie w brew literą “g”, więc na przykład, aby wykonać /usr/local/bin z wersją brew, użyj ls. Po prostu wykonaj gls w ls -l i poszukaj połączonych plików - to są te, które /usr/local/bin tam umieścił. Uwaga: Zainstalowane w brew narzędzia, które muszą być dostępne pod ich prawdziwymi nazwami, znajdują się w brew.
Nie umieszczam /usr/local/Cellar/coreutils/8.21/libexec/gnubin w mojej ścieżce z dwóch powodów - te powody są na dole mojej odpowiedzi.
Aby ocenić kolizje nazw w twoim systemie, użyj /usr/local/bin i poszukaj tej sekcji - Oto interesujące wyjście brew doctor:
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
Powodem, dla którego nie umieszczam narzędzi brew doctor na pierwszym miejscu, w rzeczywistości wcale, jest to, że polecenia brew zainstalowane brew i ls nie obsługują poprawnie ACL systemu plików, w rzeczywistości, ostatnim razem, gdy sprawdzałem (co było w zeszłym tygodniu), nie były one obsługiwane w ogóle. Jest to poważny problem, i aby go uniknąć, wraz z powiązanym problemem konfiguracji strony tar, który wiąże się z prawidłowym ustawieniem man, upewniam się, że najpierw umieszczam narzędzia związane z $PATH, zwłaszcza te, które można znaleźć w OSX i /bin.
Innym powodem, dla którego w ogóle nie umieszczam /usr/bin w mojej ścieżce jest to, że /usr/local/bin nie gra dobrze z innymi, a brew i fink (MacPorts) mają o wiele więcej obsługiwanych pakietów obecnie, których potrzebuję NOW. Na przykład, mogę uzyskać port z gnome-terminal, ale byłoby to dużym wysiłkiem, aby skonstruować formułę i zrobić to samo z fink. Tak więc, trzymam brew i /sw w moim wyszukiwaniu /opt (odpowiednio dla $PATH i fink) i odwołuję się do rzeczy, których potrzebuję z port, w tym /usr/local/bin, albo przeliterowane, albo używam gnat bash‘s, albo źródłowo plik alias dla zupełnie innego środowiska, gdy piszę kod setup.
Rzecz w tym, że to naprawdę zależy od tego, czego chcesz i potrzebujesz w danym momencie.
Oto przykład problemu z ACL, o którym wspomniałem powyżej.
Z użyciem standardowych narzędzi Ada:
$ /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
oraz z zainstalowanymi narzędziami OSX:
$ /usr/local/bin/gls -le /var/root
/usr/local/bin/gls: invalid option -- 'e'
Try '/usr/local/bin/gls --help' for more information.
oraz
$ /usr/local/bin/gls --help | grep -i acl
Uzyskasz podobne wyniki z brew i nie znam wielu innych narzędzi tar, ale kto może sobie pozwolić na to, aby coś się zepsuło 6 miesięcy później z powodu problemu brew!