Co to jest PATH
w systemie Mac OS? Użyłem go do zainstalowania globalnych narzędzi wiersza poleceń, ale jedyną znalezioną dokumentacją są samouczki , które pozwalają to zrobić, bez prawdziwego wyjaśnienia, co się dzieje pod maską. Nie znalazłem też odpowiedniej strony w Wikipedii .
Jaki jest więc cel PATH
i jaka jest różnica między /etc/paths
a ~/.bash_profile
**?
Na przykład w moim paths
plik, 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 specyficzny dla użytkownika do pliku paths
? Co „czy wszystko to jest w paths
, np. /usr/bin
?
Komentarze
- Prosimy nie ' nie łączyć wielu pytań w jednym poście. Każde z twoich pytań byłoby tutaj mile widziane osobno, ale nie wszystkie razem w ten sposób. Ogranicz to do jednego pytania, możesz połączyć 1 i 2, ale pozostałe nie mają nic wspólnego z PATH. Odpowiedź 3 jest tutaj . 4 jest wyjaśnione tutaj , a 5 nie ma większego sensu I ' Boję się. Ani Twoje pytanie bonusowe, które pliki są binarne? Nie ma skryptów.
- Zredagowałem moje pytanie. Te linki również okazały się pomocne. Dzięki.
Odpowiedź
1. Jaki jest cel PATH?
PATH
to zmienna środowiskowa , 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 podawania jawna ścieżka do nich (jak w przykładzie jsdoc
). Tak więc, jeśli PATH
ma
/usr/bin:/bin:/home/bin
, wówczas 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 jest tym wykonywanym.
2. Jaka jest różnica między / etc / path a ~ / .bash_profile
Zgodnie z pytaniem dotyczącym ServerFault , /etc/paths
służy do ustawiania PATH
globalnie (tj. W całym systemie, dla wszystkich użytkowników), podczas gdy służy do ustawiania preferencji dla poszczególnych użytkowników (gdzie ~
będzie katalogiem domowym użytkownika). Co jest napisane w .bash_profile
może albo dodać do globalnego PATH
z /etc/paths
, albo całkowicie go zastąpić.
zapis, /etc/paths
wydaje się być osobliwością MAC OS: nie spotkałem go przynajmniej w systemie GNU / Linux.
Komentarze
Odpowiedź
Jaki jest cel PATH?
W jaki sposób powłoka znajduje programy. Na przykład wpisanie ls
oznacza uruchomienie programu o nazwie ls
, który znajduje się w /bin
w większości systemów, w tym Mac OS X. Twoja powłoka może to znaleźć tylko dlatego, że /bin
znajduje się w PATH
.
Powłoka szuka programów w kolejności PATH
, od lewej do prawej. Jeśli w systemie są dwa programy ls
i oba ich katalogi znajdują się w Twoim PATH
, program znajdzie ten w wymienionym katalogu najpierw w swoim PATH
.
Jaka jest różnica między / etc / path a ~ / .bash_profile
Ścieżki ustawione w /etc/paths
są dodawane do PATH
o uruchamianie we wszystkich powłokach w systemie Mac OS X.
~/.bash_profile
to tylko jeden 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ę — Mac OS X będzie również dostarczać tcsh
i zsh
, na przykład — zmiany wprowadzone w /etc/bashrc
nie mają zastosowania do nowej powłoki.
Ponadto /etc/paths
to plik konfiguracyjny na poziomie systemu, a ~/.bash_profile
to plik na użytkownika. Gdybyś miał wielu interaktywnych użytkowników skonfigurowanych na swoim Macu, nie chciałbyś dodawać katalogów do /etc/paths
, których nie chcesz, aby pojawiały się we wszystkich „s PATH
. To samo dotyczy /etc/bashrc
, z wyjątkiem tego, że oczywiście dotyczy to tylko użytkowników, którzy używają Bash jako powłoki.
Jaka jest różnica między PATH a $ PATH i $ {PATH}?
Zwykle widzisz tylko zmienna bez sigila podczas ustawiania zmiennej. FOO=bar
ustawia zmienną środowiskową FOO
na ciąg bar
. Jeśli wpiszesz set
, powłoka pokaże ci wszystkie zmienne środowiskowe, aw takim przypadku zobaczysz również zmienną bez żadnego sigila.
$PATH
i ${PATH}
są zwykle wymienne. Mówią powłoce, aby rozszerzyła bieżącą PATH
zmienną ” s wartość lokalna. Różnica polega na tym, jak i gdzie ich używasz. Na przykład:
$ FOO=bar $ echo $FOO bar $ echo $FOOx $ echo ${FOO}x barx
W drugim poleceniu echo
, powłoka nic nie drukuje, ponieważ prosi powłokę o wydrukowanie zmienna o nazwie FOOx
, która „nie istnieje”; powłoka traktuje nieistniejące zmienne jako puste. Ponieważ trzecia echo
używa składni nawiasów klamrowych , pozwala powłoce zobaczyć, że żądasz zmiennej FOO
i że x
jest po prostu kolejnym znakiem, który chcesz wydrukować zaraz potem .
Jest inny sposób na uzyskanie tego samego efektu bez nawiasów klamrowych:
$ echo "$FOO"x barx
Zmienne środowiskowe są rozwijane w podwójne cudzysłowy i cudzysłowy oddzielają x
od interpretacji zmiennych, więc powłoka działa właściwie.
Używam FOO
zmienna środowiskowa tutaj dla jasności. Wszystko, co napisałem powyżej, odnosi się również do , ponieważ jest to tylko kolejna zmienna środowiskowa. Przykładowe teksty byłyby znacznie dłuższe.
Co oznacza export PATH? Kiedy eksportujemy?
Biorąc pod uwagę powyższy przykład FOO
, gdybyś miał uruchomić inny program, nie „nie zobaczy zmiennej FOO
, ponieważ nie jest eksportowana. Znajduje się tylko w tej jednej instancji powłoki:
$ echo $FOO bar $ bash $ echo $FOO $ exit $ export FOO $ bash $ echo $FOO bar
Kiedy po raz pierwszy uruchamiam nową powłokę bash
pod tą, której już używałem, a następnie próbuję wyświetlić wartość FOO
, uzyskaj puste miejsce, ponieważ FOO
nie został „wyeksportowany, aby podprogramy mogły je zobaczyć. Następnie opuściłem drugą instancję bash
, wyeksportowałem ją, uruchomiłem ponownie bash
i teraz druga instancja widzi wartość FOO
.
Używasz export
, gdy chcesz, aby podprogramy widziały wartości ustawione w powłoce i nie używaj ich kiedy nie chcesz, aby tak się stało.
Zazwyczaj nie eksportuję zmiennych tymczasowych w skryptach powłoki, ponieważ nie chcę, aby zmieniały zachowanie programów uruchamianych z tego skryptu powłoki.
Nie mam zamiaru odpowiadać na żadne z twoich innych pytań. Masz zadawać tylko jedno pytanie na raz. Odpowiedziałem tylko na tak wiele, ponieważ są one niejasno powiązane. Wszystko inne należy do osobnego pytania.
/etc/paths
w systemie OSX.