Co to jest PATH
w systemie Mac OS? Użyłem go do zainstalowania globalnych narzędzi wiersza polecenia, ale jedyną dokumentacją, którą znalazłem, są tutoriale do tego, jak to zrobić, bez prawdziwego wyjaśnienia tego, co dzieje się pod maską. Nie znalazłem też odpowiedniej strony w Wikipedii .
Więc jaki jest cel PATH
i jaka jest różnica między /etc/paths
i ~/.bash_profile
**?
Na przykład w moim paths
pliku widzę to:
/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin
Ale w moim ~/.bash_profile
widzę to:
# Setting PATH for Python 2.7
# The orginal version is saved in .bash_profile.pysave
PATH="/Library/Frameworks/Python.framework/Versions/2.7/bin:${PATH}"
export PATH
Czy to tylko dodatek do paths
pliku specyficzny dla użytkownika? Co znajduje się wszystko, co w rzeczy paths
, jak /usr/bin
?
Odpowiedzi:
1. Jaki jest cel ŚCIEŻKI?
PATH
jest zmienną środowiskową, która zawiera rozdzieloną dwukropkami listę katalogów, w których powłoka będzie szukać plików wykonywalnych, które nazwiesz w wierszu poleceń, bez podania wyraźnej ścieżki do nich (jak w twoimjsdoc
przykładzie). Tak więc, jeśliPATH
mawtedy każdy plik wykonywalny, który wywołujesz według nazwy, będzie wyszukiwany w tych katalogach (w tej kolejności), a pierwszy znaleziony plik wykonywalny zostanie wykonany.
2. Jaka jest różnica między / etc / paths a ~ / .bash_profile
Zgodnie z tym pytaniem na ServerFault
/etc/paths
służy do ustawianiaPATH
globalnego (tj. Ogólnosystemowego , dla wszystkich użytkowników), podczas gdy~/.bash_profile
służy do ustawiania preferencji dla poszczególnych użytkowników (gdzie~
będzie katalog domowy użytkownika). Co jest napisane w.bash_profile
puszce albo dodać do globalnejPATH
z/etc/paths
lub zastąpić go całkowicie./etc/paths
Nawiasem mówiąc , wydaje się , że jest to szczególna cecha systemu Mac OS: przynajmniej nie spotkałem się z tym na GNU / Linux.źródło
/etc/paths
na temat OSX.W ten sposób twoja powłoka znajduje programy. Na
ls
przykład podczas pisania uruchamia się program o nazwie,ls
który działa w/bin
większości systemów, w tym w systemie Mac OS X. Powłoka może to znaleźć tylko dlatego, że/bin
jest w kataloguPATH
.Powłoka szuka programów w
PATH
kolejności od lewej do prawej. Jeślils
w twoim systemie są dwa programy, a ich katalogi znajdują się w twoimPATH
, znajdzie ten w katalogu wymienionym jako pierwszy w twoimPATH
.Ustawione ścieżki
/etc/paths
są dodawane doPATH
uruchamiania we wszystkich powłokach systemu Mac OS X.~/.bash_profile
jest tylko jednym z kilku skryptów powłoki uruchamianych przez Bash podczas uruchamiania, a kilka z nich jest specyficznych dla Bash. Dlatego jeśli zmienisz powłokę - system Mac OS X również zostanie dostarczonytcsh
izsh
, na przykład - zmiany wprowadzone, aby/etc/bashrc
nie dotyczyły nowej powłoki.Ponadto
/etc/paths
jest plikiem konfiguracyjnym na poziomie systemu, podczas gdy~/.bash_profile
jest na użytkownika. Jeśli masz wielu interaktywnych użytkowników skonfigurowanych na komputerze Mac, nie chcesz dodawać katalogów/etc/paths
, w których nie chcesz pojawiać się u wszystkichPATH
. To samo dotyczy/etc/bashrc
, z wyjątkiem tego, że dotyczy to tylko użytkowników, którzy używają Bash jako powłoki.Zazwyczaj zmienna jest wyświetlana tylko bez pieczęci podczas ustawiania zmiennej.
FOO=bar
ustawiaFOO
zmienną środowiskową na ciągbar
. Jeśli wpiszeszset
, powłoka pokaże wszystkie zmienne środowiskowe, w takim przypadku zobaczysz również zmienną bez żadnego znacznika.$PATH
i${PATH}
zwykle są wymienne. Mówią powłoce, aby na miejscu rozszerzyła bieżącąPATH
wartość zmiennej. Różnica dotyczy sposobu i miejsca ich użycia. Na przykład:W drugim
echo
poleceniu powłoka nic nie drukuje, ponieważ prosi powłokę o wydrukowanie zmiennej o nazwieFOOx
, która nie istnieje; powłoka traktuje nieistniejące zmienne jako puste. Ponieważ trzeciecho
używa składni nawiasów klamrowych, pozwala powłoce zobaczyć, że żądaszFOO
zmiennej, i żex
jest to po prostu kolejny znak, który chcesz wydrukować natychmiast po tym.Nawiasem mówiąc, istnieje inny sposób na uzyskanie tego samego efektu bez nawiasów klamrowych:
Zmienne środowiskowe są rozwijane w podwójnych cudzysłowach, a cudzysłowy oddzielają
x
od rozszerzania zmiennych, więc powłoka robi właściwą rzecz.Używam
FOO
tutaj zmiennej środowiskowej tylko dla przejrzystości. Wszystko, co napisałem powyżej, odnosi się równie dobrzePATH
, ponieważ jest to kolejna zmienna środowiskowa. Przykładowe teksty byłyby o wiele dłuższe.Biorąc powyższy
FOO
przykład, gdybyś uruchomił inny program, nie zobaczyłbyFOO
zmiennej, ponieważ nie jest eksportowany. Żyje tylko w tej jednej instancji powłoki:Kiedy po raz pierwszy uruchamiam nową
bash
powłokę pod tą, której już używałem, a następnie próbuję pokazać wartośćFOO
, otrzymuję puste, ponieważFOO
nie zostało wyeksportowane do podprogramów, aby zobaczyć. Następnie opuściłem drugiebash
wystąpienie, wyeksportowałem je, uruchomiłembash
ponownie, a teraz drugie wystąpienie widzi wartośćFOO
.Używasz tego,
export
gdy chcesz, aby podprogramy widziały wartości ustawione w powłoce, i nie używaj go, jeśli nie chcesz, aby tak się stało.Zazwyczaj nie eksportuję zmiennych tymczasowych do skryptów powłoki, ponieważ nie chcę, aby zmieniały sposób działania programów z tego skryptu powłoki.
Nie zamierzam odpowiadać na żadne z twoich innych pytań. Powinieneś zadawać tylko jedno pytanie na raz. Odpowiedziałem tylko na tak wiele, ponieważ są niejasno powiązane. Cała reszta należy do osobnego pytania.
źródło