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
!