2009-11-11 18:48:39 +0000 2009-11-11 18:48:39 +0000
141
141

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

Wpisuję echo $PATH w wierszu poleceń i dostaję

/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 jest ustawione, ponieważ mój plik .bash_login jest pusty.

Szczególnie martwi mnie to, że po zainstalowaniu MacPorts, zainstalował on masę śmieci w /opt. Nie wydaje mi się, żeby ten katalog istniał w normalnej instalacji Mac OS X.

Uaktualnienie: Podziękowania dla jtimberman za poprawienie mojego oświadczenia echo $PATH.

Odpowiedzi (7)

161
161
161
2009-11-11 20:57:32 +0000

Po uruchomieniu bash odczytuje poniższe pliki przy każdym logowaniu. Dla potrzeb systemu OS X oznacza to każde otwarcie nowego okna Terminal.

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

Kiedy uruchamiasz nową powłokę, wpisując bash w wierszu poleceń, odczytuje ona .bashrc

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

W końcu, /etc/paths i /etc/paths.d są również odczytywane przez powłokę.


/opt/local/bin itd. są dodawane w ~/.tcshrc przez MacPorts. Pamiętaj również, aby szukać w ~/.cshrc.

25
25
25
2011-03-25 18:07:37 +0000

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

Szybki przykład wykonania 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 umieścić tam plik bezpośrednio. Tak czy inaczej, wszystkie części ścieżki w plikach w tym katalogu zostaną dodane do domyślnej ścieżki.

Działa to również dla manpath.

Tutaj jest link do więcej szczegółów: ars technica: how do i add something to PATH in snow leopard?

Po drugie: MacPorts umieszcza wszystko w katalogu opt właśnie dlatego, że nie jest on używany przez rzeczy Apple. W ten sposób nie będzie konfliktu. Ich przewodnik (świetnie napisany, BTW) ma wyjaśnienie, dlaczego używa opt i jak zmienić to domyślne ustawienie, jeśli chcesz. MacPorts Guide

4
4
4
2009-11-11 19:07:28 +0000

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

echo $PATH

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

3
3
3
2012-02-07 19:36:18 +0000

Jest też ścieżka określona przez ssh.

Porównaj echo $PATH do ssh localhost 'echo $PATH'. Ponieważ ssh nie czyta /etc/profile, /usr/libexec/path_helper nie jest uruchamiany i dlatego /etc/paths jest pomijany. Teraz spróbuj ssh localhost 'source /etc/profile; echo $PATH'. Ścieżki powinny być bliższe. Pozostałe różnice prawdopodobnie wynikają z modyfikacji ścieżek w twoim .bash (który jest również pomijany przez ssh) i .bashrc (który jest czytany przez ssh).

Jeśli chcesz, aby ścieżka ssh była podobna do normalnej ścieżki terminala, możesz dodać source /etc/profile do .bashrc.

2
2
2
2013-06-01 09:50:21 +0000

Może być zdefiniowany w:

  • zmienne systemowe - /etc/paths
  • zmienne użytkownika - patrz wyjaśnienie @Steve Folly'ego
1
1
1
2009-11-11 19:13:39 +0000

W rzeczywistości jest on przechowywany w pliku .profile zamiast .bash_login i często zdarza się, że MacPorts używa go zamiast pliku .bash_login.

Również katalog /opt jest zwykle tworzony przez MacPorts i przechowuje swoje pliki w tym katalogu.

1
1
1
2012-06-26 01:40:17 +0000

Odnośnie docs dla narzędzia /usr/libexec/path_helper, początkowe składniki dla $PATH zostały wzięte z /etc/paths i domyślnie wyglądają jak

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

dla OS-X Snow Leopard