Gdzie ustawia się $ PATH w OS X 10.6 Snow Leopard?

139

Piszę echo $PATHw wierszu poleceń i otrzymuję

/opt/local/bin:/opt/local/sbin:/Users/andrew/bin:/usr/local/bin:/usr/local/mysql/bin:/usr/local/pear/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/opt/local/bin:/usr/local/git/bin

Zastanawiam się, gdzie to się ustawia, ponieważ mój .bash_loginplik jest pusty.

Szczególnie niepokoi mnie to, że po zainstalowaniu MacPorts zainstalował kilka śmieci /opt. Nie sądzę, aby ten katalog istniał nawet w normalnej instalacji Mac OS X.

Aktualizacja: Podziękowania dla jtimberman za poprawienie mojego echo $PATHoświadczenia

Andrzej
źródło
5
komentarz SMcCandlish :easiest solution when you want to make a site-wide path change (e.g. to include /usr/libexec or whatever) is to edit /etc/paths . While the new /etc/paths.d/ thing is functional, it's actually more hassle than maintaining a single file. As others have hinted but not spelled out, if the path changes you want would be useful only for one user, it's best to make that change in the bash and/or tcsh config files in that user's home directory instead of system-wide.
Sathyajith Bhat
@Sathya, Wydaje mi się, że /etc/paths.djest przydatny w skryptach instalacyjnych. Jeśli chcę, aby mój skrypt instalacyjny dodał zainstalowany program do ścieżki, mogę upuścić plik /etc/paths.d. Jeśli chcę ręcznie edytować ścieżkę, /etc/pathsjest lepszą opcją.
haydenmuhl,
Stworzyłem skrypt oparty głównie na tym poście, który szybko drukuje, gdzie PATH jest zdefiniowany wzdłuż tych wielu lokalizacji: gist.github.com/lopespm/6407349952bc8a1ff8fb
Pedro Lopes

Odpowiedzi:

161

Po bashuruchomieniu odczytuje następujące pliki przy każdym logowaniu. Dla celów OS X oznacza to za każdym razem, gdy otwierasz nowe Terminalokno.

/etc/profile
~/.bash_profile
~/.bash_login   (if .bash_profile does not exist)
~/.profile      (if .bash_login does not exist)

Gdy uruchomisz nową powłokę, wpisując bashw wierszu poleceń, czytamy.bashrc

OS X używa również ~/.MacOSX/environment.plistdo ustawiania większej liczby zmiennych środowiskowych, w tym ścieżek, jeśli to konieczne.

Wreszcie /etc/pathsi /etc/paths.dsą czytane również przez powłokę.


/opt/local/binitp. są dodawane ~/.tcshrcprzez MacPorts. Pamiętaj również, aby zajrzeć do środka ~/.cshrc.

Steve Folly
źródło
5
Najwyraźniej ~/.MacOSX/environment.plistnie działa u niektórych osób. W Change Path for OS X/etc/paths.d opisano alternatywne użycie folderu . Nie testowałem tego.
Arjan,
+1 dla ~/.cshrc. Oszalałem próbując dowiedzieć się, dlaczego ~/.profilenie działa.
tomlogic 19.10.11
Myślę, że ta odpowiedź jest niepełna. Próbuję dowiedzieć się, gdzie znajduje się błędna (nieistniejąca) ścieżka: / usr / bin / local, moja powłoka narzeka i nie ma jej w żadnym z tych plików.
Tommy
Myślę, że .bashrcjest czytany niezależnie od tego, czy piszesz bashczy nie.
Xiao Peng - ZenUML.com
48

Spójrz na plik /etc/paths, który jest używany przez /usr/libexec/path_helper, który jest używany przez /etc/profile.

W przypadku MacPorts użyj sudo /etc/paths/opt/local/bini ponownie otwórz okno terminala.

Społeczność
źródło
25

Poważnie, Leopard dał nam nowy sposób na dodanie ścieżki. Po prostu utwórz plik zawierający część ścieżki, którą chcesz dodać, i umieść go w /etc/paths.d

Szybki przykład zrobienia tego w jednym kroku to:

echo "/some/path/to/add" >> /etc/paths.d/somefilename

W przeciwnym razie możesz po prostu przejść do /etc/paths.d i bezpośrednio tam umieścić plik. Tak czy inaczej, wszystkie części ścieżki w plikach w tym katalogu zostaną dołączone do ścieżki domyślnej.

Działa to również w przypadku manpath.

Oto link do bardziej szczegółowych informacji:

ars technica: jak dodać coś do ŚCIEŻKI w lampartach śnieżnych?

Druga uwaga: MacPorts umieszcza wszystko w katalogu opt właśnie dlatego, że nie jest używane przez Apple. W ten sposób nie będzie konfliktu. Ich przewodnik (doskonale napisany, BTW) zawiera wyjaśnienie, dlaczego używa opt i jak zmienić to ustawienie domyślne, jeśli chcesz.

Przewodnik MacPorts

leanne
źródło
Bardzo fajny. Teraz musimy tylko pobrać te aplikacje zależne od ścieżki, aby nie zanieczyszczały już naszych plików profilowych ...
Daniel Beck
Kocham to. Prosty!
Andrew Hedges
komentarz SMcCandlish :I have to concur that there's nothing weird or bad about MacPorts using /opt (likewise Fink uses /sw); trying to replace stock Mac BSD parts with bleeding-edge builds from external projects like these is a recipe for an unusable system that requires an OS reinstallation.
Sathyajith Bhat
Pojedyncza linia, bez dopisywania do plików i łatwe usuwanie. Kocham to. Dzięki leanne
Ibrahim Lawal
4

Aby pokazać swoją ścieżkę, wyświetl echo $ PATH.

echo $PATH

Aby ustawić ścieżkę, edytuj ~/.bash_profile, a nie ~/.bash_login.

jtimberman
źródło
3

Istnieje również ścieżka określona przez ssh .

Porównaj echo $PATHz ssh localhost 'echo $PATH'. Ponieważ ssh nie czyta / etc / profile, / usr / libexec / path_helper nie działa, a zatem / etc / paths jest pomijany. Teraz spróbuj ssh localhost 'source /etc/profile; echo $PATH'. Ścieżki powinny być bliżej. Pozostałe różnice będą prawdopodobnie spowodowane modyfikacją ścieżki w pliku .bash_profile (który jest również pomijany przez ssh) i .bashrc (który jest odczytywany przez ssh).

Jeśli chcesz, aby ścieżka ssh była podobna do normalnej ścieżki terminalu, możesz dodać ją source /etc/profiledo pliku .bashrc.

Keith Bentrup
źródło
Dzięki za podpowiedź! Właśnie szukałem rozwiązania z ssh. svn + ssh nie mógł znaleźć polecenia svnserve dokładnie, ponieważ ścieżka do svnserve była w .profile, ale nie w .bashrc.
KIR
2

Można to zdefiniować w:

  • Zmienne systemowe - /etc/paths
  • Zmienne użytkownika - patrz wyjaśnienie @Steve Folly
ericn
źródło
1

W rzeczywistości jest on przechowywany w twoim .profilepliku zamiast .bash_logini często MacPorts użyje tego zamiast .bash_loginpliku.

Również /optkatalog jest zwykle tworzony przez MacPorts i przechowuje swoje pliki w tym folderze.

Ricbax
źródło
1

Jeśli chodzi o dokumenty dotyczące /usr/libexec/path_helpernarzędzia, początkowe składniki $ PATH zostały pobrane /etc/pathsi domyślnie wyglądają

/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin

dla OS-X Snow Leopard

AB
źródło