Próbuję skonfigurować Homebrew na nowym komputerze Mac (na poprzednich komputerach Mac instalowałbym pakiety ze źródła).
Pierwszy pakiet, który próbowałem zainstalować, to Git:
$ brew install git
Instalacja przebiegła pomyślnie, ale which git
nadal pokazuje ten, /usr/bin/git
który przyszedł z Lionem (myślę?). I nie ten, /usr/local/bin/git
który właśnie został zainstalowany.
$ echo $PATH
/Users/meltemi/.rvm/gems/ruby-1.9.2-p290@rails31/bin:/Users/meltemi/.rvm/gems/ruby-1.9.2-p290@global/bin:/Users/meltemi/.rvm/rubies/ruby-1.9.2-p290/bin:/Users/michael/.rvm/bin:/usr/local/mysql/bin:/opt/subversion/bin:/Developer/Additions/checker/:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin
Jak widać, /usr/bin
domyślnie do wcześniej /usr/local/bin
w$PATH
Więc jestem zmieszany! Myślałem, że celem HomeBrew (i czymś, co twórcy mogą się chwalić) było to, że nie musisz zadzierać ze $PATH
zmienną!?!
Co więc zrobiłem źle?
If you choose /usr/local, everything 'just works!'
że muszę się zastanawiać, czego mi brakuje ... ponieważ to nie „po prostu działa”.Odpowiedzi:
Uważam, że ten powiązany post był bardzo pomocny. Zamiast zmieniać
$PATH
zmienną, wystarczy po prostu edytować/etc/paths
plik.Homebrew chce, żebym zmienił moją ŚCIEŻKĘ; nie mam pojęcia jak
Gdy tylko postąpiłem zgodnie ze wskazówkami i podałem
/usr/local/bin
wyżej/usr/bin
, moje problemy zostały rozwiązane.sudo vi /etc/paths
/usr/local/bin
ścieżka była wprowadzana nad/usr/bin
ścieżkąOto jak wygląda moja po tym, jak to zrobiłem:
* Aby zapisać i wyjść, wpisz dwukropek (
:
), a następnie wpiszwq
(aby napisać i wyjść jednocześnie), a następnie Enter.Możesz także otworzyć
/etc/paths
plik w graficznym edytorze tekstu i edytować go w ten sposób.Podziękowania dla fengda w Stack Overflow za jego odpowiedź.
źródło
path_helper
i/etc/paths.d
.Ta odpowiedź jest nieaktualna. Preferowane
PATH
porządkowanie Homebrew było takie, jak wyjaśniono, ale nie jest to już prawdą. Jednak podejście to ma bardziej ogólne zastosowanie, więc ze względu na zainteresowanie, pozostawiam to.Nie powinieneś
Homebrew celowo utrzymuje
/usr/local/bin
po/usr/bin
w ścieżce dla maksymalnej kompatybilności. Odwrócenie kolejności tych katalogówPATH
poprzez edycję/etc/paths
oznaczałoby, że wszystkie programy w dowolnym miejscu w systemie, bez względu na to, jak zostały uruchomione, otrzymają wersję polecenia Homebrew. Ale niektórzy mogą spodziewać się wersji Apple lub po prostu nie będą mogli korzystać z nowszej wersji itp.Jak zachować tę zasadę i nadal otrzymywać wersję Homebrew
git
? Jak mówi przysłowie, wszystkie problemy można rozwiązać za pomocą warstwy pośredniej (z wyjątkiem zbyt wielu warstw pośrednich). - Lub w tym przypadku, jak się okazuje, dwie warstwy.W szczególności częścią moich zwyczajów związanych z Uniksem jest posiadanie
~/bin
katalogu, który umieszczam na początkuPATH
. To jeden z pierwszych bitów w moim.bashrc
:Sprawdza, czy
PATH
zawiera~/bin
, a jeśli nie, dodaje. Po wprowadzeniu tego, wybiórcze sprawianie, aby tylko zarządzane przez Homebrewgit
miało pierwszeństwo przed wersją systemową (zamiast każdego pliku binarnego zarządzanego przez Homebrew) i tylko dla twoich sesji powłoki (zamiast wszystkich programów uruchamianych z dowolnego miejsca, w tym programów GUI), jest tak proste jak symlinkowanie:Państwo mogłoby podlinkowujemy
/usr/local/Cellar/git/1.8.2.1/bin/git
bezpośrednio, ale wtedy trzeba by naprawić dowiązanie za każdym razem robiłbrew upgrade git
(bezpośrednio lub pośrednio). Łącząc się z dowiązaniem symbolicznym Homebrew o stałej lokalizacji, nie musisz się tym martwić.Więc dodajesz katalog do swojego
$HOME
, abyś mógł dodać swój własnyPATH
, abyś mógł dowiązać symbolicznie do dowiązania symbolicznego, a to rozwiązuje twój problem i wywołuje uśmiech na Dr Seussie. Yo dawg Stado, które lubisz dowiązania symboliczne, więc umieszczamy ścieżkęPATH
, abyś mógł dowiązać symbolicznie podczas symlinkowania.źródło
ln
poleceniu. Pierwsza ścieżka to cel, a druga to dowiązanie symboliczneexport PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"
Nie zrobiłeś nic złego, ale wydaje się całkiem jasne, że gdybyś znalazł się
/usr/local/bin
na swojej drodze, zanim/usr/bin
ten konkretny problem zniknie. Najłatwiej jest to zrobić i umieścić coś takiegow twoim,
~/.bash_profile
więc wszystko, co instaluje Homebrew, znajduje się jako pierwsze. W ten sposób skonfigurowałem to na moim Macu i działało to dla mnie tak długo, jednak YMMV.Wygląda na to, że wierzą, że przydałoby się
/usr/local/bin
to później/usr/bin
, więc chociaż mogłem zepsuć własne$PATH
, widzę, gdzie brakuje ich dokumentacji:Z rozbieżności między wiki a piwnym lekarzem # 10738 . Należy zauważyć, że dokument ten mówi dalej, „FAQ (powyższy cytat) odnosi się do PATH ustawienie dla aplikacji GUI; lekarz (rada umieścić
/usr/local/bin
na przodzie/usr/bin
. W PATH) odnosi się do PATH ustawienie dla aplikacji CLI”źródło
/usr/local/bin
s$PATH
? Tak mi się wydaje. Zastanawiam się, czy zamiast tego powinniśmy edytować kolejność domyślnych ścieżek/etc/paths
lub zawartość/etc/paths.d
? Ale to wpłynie na każdego użytkownika ... może nie jest zła rzecz. W każdym razie chciałem tylko zobaczyć, jak podeszli do tego inni ludzie.PATH
(zgodnie z własnym wyborem), aby go/usr/local/bin
poprzedzić/usr/bin
. Ja osobiście zaktualizowaćPATH
in.bash_profile
jak sugeruje tutaj./usr/local/bin
nawet jeśli ślada/usr/bin
na ścieżce. Ale aplikacje GUI wymagają specjalnego kodowania? Wygląda na to, że wszystkie aplikacje, z graficznym interfejsem użytkownika lub nie, wymagają zmiany zmiennej $ PATH. Czego więc brakuje mi (lub twórcom Homebrew)?Nie zgadzam się z odpowiedzią Jomaoma. Edycja pliku / etc / paths zmieni ścieżki ładowania dla wszystkich programów. Może to być niebezpieczne, jeśli aplikacja systemowa spodziewa się znaleźć określoną wersję pliku binarnego, ale znajdzie inną wersję, ponieważ edytowałeś plik ścieżek. Zamiast tego zmień zmienną ścieżki w ~ / .bashrc (lub ~ / .bash_profile). Wtedy ścieżka ładowania zmieni się tylko wewnątrz terminala:
Następnie załaduj ponownie bash lub
source ~/.bashrc
, i jesteś gotowy. Ponieważ ścieżka homebrew jest ważniejsza niż cokolwiek innego, bash załaduje wersję pobraną za pomocą homebrew.źródło
.bashrc
nie jest domyślnie ładowany. Czy to robisz ręcznie?.bashrc
więc czerpię go z mojego.bash_profile
. Jeśli nie chcesz tworzyć pliku rc, możesz dodać polecenie do swojego.bash_profile
.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 zls
itar
oraz za pomocą innych agregatorów pakietów, takich jakfink
iport
(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órebrew
nie chcą kolizji nazw, nie tworzy dowiązania symbolicznego./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żytkowaniagls
. 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 - otobrew doctor
interesujące wyniki:Powodem, dla którego nie stawiam
brew
narzędzi na pierwszym miejscu, w rzeczywistości wcale nie jest to, żebrew
zainstalowanels
itar
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ązanymman
problemem konfiguracji strony, który oznacza wraz z ustawieniem$PATH
odpowiedniego, upewniam się, że umieściłemOSX
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, żebrew
nie gra się dobrze z innymi,fink
aport
(MacPorts) mają obecnie o wiele więcej obsługiwanych pakietów, których potrzebuję TERAZ . Na przykład mogę sobiegnome-terminal
z tym poradzićfink
, ale zbudowanie formuły i zrobienie tego samego byłoby dużym wysiłkiembrew
. Więc trzymam/sw
i/opt
w moich poszukiwań$PATH
(dlafink
iport
, odpowiednio) i rzeczy referencyjne muszę z/usr/local/bin
tymgnat
, albo sprecyzować, czy mogę użyćbash
alias
„S lub I sourcesetup
plik na zupełnie innym środowisku, kiedy pisanieAda
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:oraz z
brew
zainstalowanymi narzędziami:i
Uzyskasz podobne wyniki
tar
i nie znam wielu innychbrew
narzędzi, ale na kogo stać 6 miesięcy z powoduACL
problemu!źródło
Jest tu mnóstwo dobrych odpowiedzi. To moje:
Oszczędza to konieczności tworzenia osobnego aliasu dla każdego programu i jako bonus pozostawia dostęp do domyślnych instalacji na wypadek, gdyby były potrzebne.
Działa tak samo, jeśli używasz ZSH; po prostu zamień się
bashrc
nazshrc
. Można przełączać sięmy
za_
, a nawet@
zaoszczędzić na pisanie.źródło
Zamiast w ogóle zadzierać ze ŚCIEŻKĄ (która w mojej historii wraca by mnie spalić miesiące później) dodałem alias dla git w moim katalogu niestandardowych aliasów zsh (~ / .zshrc / custom / git_alias.zsh).
alias git='/usr/local/bin/git'
źródło
Wolę ograniczać zmiany do zmiennych środowiskowych, takich jak
$PATH
użytkownicy, którzy faktycznie chcą zmiany. Dlatego po prostu dodaję do~/.bashrc
:źródło
Możesz wydać następujące polecenie w terminalu, doda katalog domowy brew + + bin do ŚCIEŻKI twojego dowolnego pliku inicjującego SHELL „rc” (bash, zsh, csh)
echo "export PATH="'$PATH:$(brew --prefix)/bin' >> ~/.$(basename $SHELL)rc
Cieszyć się !
źródło