Co to jest PATH w systemie Mac OS?

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

  • Właśnie je zredagowałem, ale dziękuję za udzielenie odpowiedzi na wszystkie!
  • @ggundersen Dostosowałem odpowiedź, aby pasowała do edytowanego pytania.
  • @ggundersen, możesz też przeczytać moją odpowiedź i th Znajdujące się tam linki dotyczące /etc/paths w systemie OSX.

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.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *