Jak rozumiem, brew
nie umieszcza niczego, /usr/local/bin
co koliduje (ma taką samą nazwę jak) dystrybuowany plik wykonywalny Apple. Dlatego posiadanie /usr/local/bin
na ścieżce przed /bin
i /usr/bin
nie powinno być problemem, ponieważ nie powinno być kolizji nazw. * Jednak zobacz problemy z ls
i tar
oraz za pomocą innych agregatorów pakietów, takich jak fink
i port
(MacPorts), poniżej.
Brew
robi jedną z dwóch znanych mi rzeczy, które pomagają zarządzać kolizjami nazw:
Brew
pozostawia niepowiązane beczki w piwnicy. Aby zainstalować rzeczy, brew pozostawia narzędzia tam, gdzie są i tworzy symboliczne linki do tych narzędzi /usr/local/bin
. W przypadku narzędzi, które brew
nie chcą kolizji nazw, nie tworzy dowiązania symbolicznego.
- Dla wielu, jeśli nie wszystkich standardowych narzędzi, które są również w
/bin
i /usr/bin
, brew
prefiksy w link /usr/local/bin
z „g”, a więc na przykład, wykonują ls
z wersją piwny, użytkowania gls
. Wystarczy zrobić ls -l
in /usr/local/bin
i szukać powiązanych plików - to te, brew
umieszczone tam. Uwaga: brew
Zainstalowane narzędzia, do których należy uzyskać dostęp pod ich prawdziwymi nazwami, znajdują się w /usr/local/Cellar/coreutils/8.21/libexec/gnubin
.
Nie stawiam /usr/local/bin
na swojej drodze z dwóch powodów - te powody leżą u podstaw mojej odpowiedzi.
Aby ocenić kolizje nazw w systemie, użyj brew doctor
i poszukaj tej sekcji - oto brew doctor
interesujące wyniki:
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 stawiam brew
narzędzi na pierwszym miejscu, w rzeczywistości wcale nie jest to, że brew
zainstalowane ls
i tar
polecenia nie obsługują poprawnie ACL systemu plików, w rzeczywistości, kiedy ostatnio sprawdzałem (który był w zeszłym tygodniu), nie były w ogóle załatwione . Jest to WIELKI problem i aby go całkowicie uniknąć, wraz z powiązanym man
problemem konfiguracji strony, który oznacza wraz z ustawieniem $PATH
odpowiedniego, upewniam się, że umieściłem OSX
powiązane narzędzia, zwłaszcza te znalezione w, /bin
i /usr/bin
, na początku.
Innym powodem, dla którego nawet nie postawiłem /usr/local/bin
na swojej drodze, jest to, że brew
nie gra się dobrze z innymi, fink
a port
(MacPorts) mają obecnie o wiele więcej obsługiwanych pakietów, których potrzebuję TERAZ . Na przykład mogę sobie gnome-terminal
z tym poradzić fink
, ale zbudowanie formuły i zrobienie tego samego byłoby dużym wysiłkiem brew
. Więc trzymam /sw
i /opt
w moich poszukiwań $PATH
(dla fink
i port
, odpowiednio) i rzeczy referencyjne muszę z /usr/local/bin
tym gnat
, albo sprecyzować, czy mogę użyć bash
alias
„S lub I source setup
plik na zupełnie innym środowisku, kiedy pisanie Ada
kodu.
Chodzi o to, że tak naprawdę zależy od tego, czego chcesz i potrzebujesz w danym momencie.
Oto przykład problemu ACL, o którym wspomniałem powyżej.
Za pomocą standardowych OSX
narzędzi:
$ /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 brew
zainstalowanymi narzędziami:
$ /usr/local/bin/gls -le /var/root
/usr/local/bin/gls: invalid option -- 'e'
Try '/usr/local/bin/gls --help' for more information.
i
$ /usr/local/bin/gls --help | grep -i acl
Uzyskasz podobne wyniki tar
i nie znam wielu innych brew
narzędzi, ale na kogo stać 6 miesięcy z powodu ACL
problemu!