Jaka jest różnica między „echo $ PATH” a / etc / paths?

10

Kiedy echo $ PATH uzyskać to: Users/myusername/.node_modules_global/bin:/Users/mac/.node_modules_global/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/mac/Library/Android/sdk/platform-tools:/platform-tools.

Chcę usunąć niektóre ścieżki z tego, ale po otwarciu pliku za pomocą polecenia vim /etc/pathsotrzymuję następujące wyniki:

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

Czy plik / etc / paths różni się od zmiennej $ PATH?

poziom 0
źródło
Która wersja OS X? Nie mam /etc/pathsw swoim, ale biegnę 10.4.11i od tamtej pory wszystko prawdopodobnie się zmieniło
Fox
1
Jednak zgodnie z odpowiedzią na AskDifferent , /etc/pathssłuży do generowania domyślne $PATH, które można później zmodyfikować
Fox
To jest domyślne. Zanim użytkownik uruchomi powłokę, zostanie ona zmodyfikowana przez inne pliki, które powłoki źródłowe, takie jak ~/.bashrclub~/.profile
Sergiy Kolodyazhnyy

Odpowiedzi:

14

/etc/pathsjest częścią tego, co jest używane do konfiguracji $PATHprocesów powłoki. Po otwarciu nowego okna terminala zostanie bashuruchomione, które uruchamia kilka skryptów uruchamiania: /etc/profileORAZ ~/.bash_profileLUB (jeśli to nie istnieje) ~/.bash_loginLUB (jeśli to nie istnieje) ~/.profile. Te skrypty konfigurują środowisko powłoki, w tym $PATH.

Jedną z rzeczy /etc/profilejest uruchamianie /usr/libexec/path_helper, które czyta /etc/pathsi wszelkie pliki w /etc/paths.d, i dodaje ich zawartość $PATH. Ale to tylko punkt wyjścia; własny skrypt startowy (jeśli istnieje) może dodawać $PATH, edytować, całkowicie zastępować itp.

Wygląda mi na to, że twój skrypt startowy (i / lub rzeczy, które uruchamia) dodaje szereg wpisów do podstawowego zestawu, z którego pobiera /etc/paths. Na początku dodaje się „Users / myusername / .node_modules_global / bin: /Users/mac/.node_modules_global/bin:” $PATH(co oznacza, że ​​te katalogi będą wyszukiwane w pierwszej kolejności) i „: / Users / mac / Library / Android / sdk / platform-tools: / platform-tools ”dodaje się na końcu. Jeśli chcesz dokładnie wiedzieć, co je dodaje, musisz spojrzeć na skrypt startowy.

Przy okazji, ten proces konfiguracji $PATHdotyczy tylko powłok bash „login”. Wszystko, co uruchamia powłoka bash, odziedziczy $PATHpo niej, więc prawdopodobnie ma zasadniczo to samo. Powłoki bash niezalogowane wykonują nieco inny proces instalacji. Inne powłoki i rzeczy, które w ogóle nie zaczęły się od powłoki (np. Zadania cron), mogą mieć zupełnie inne cechy $PATHs.

Gordon Davisson
źródło
Zauważ, że w przypadku powłok niezalogowanych (np /usr/local/bin/bash. Zainstalowanych brewbez -largumentu) /usr/libexec/path_helpernie jest używany i /usr/local/bindomyślnie nie jest zawarty w pliku $PATH. Aby użyć path_helperw skrypcie lub interaktywnie, polecenie to eval $(/usr/libexec/path_helper).
Kyle Strand
0

Pierwsze miejsca, w których chciałbym sprawdzić zmiany, to:

~/.profile
~/.bashrc
~/.bash_profile

Jeśli używasz czegoś, co nie jest Bash, sprawdź pliki konfiguracyjne, aby zobaczyć jakiekolwiek informacje o ŚCIEŻCE.

rovr138
źródło