Jaki jest cel ŚCIEŻKI?
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 katalogu PATH
.
Powłoka szuka programów w PATH
kolejności od lewej do prawej. Jeśli ls
w twoim systemie są dwa programy, a ich katalogi znajdują się w twoim PATH
, znajdzie ten w katalogu wymienionym jako pierwszy w twoim PATH
.
Jaka jest różnica między / etc / paths a ~ / .bash_profile
Ustawione ścieżki /etc/paths
są dodawane do PATH
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 dostarczony tcsh
i zsh
, 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 wszystkich PATH
. To samo dotyczy /etc/bashrc
, z wyjątkiem tego, że dotyczy to tylko użytkowników, którzy używają Bash jako powłoki.
Jaka jest różnica między ŚCIEŻKĄ a $ ŚCIEŻKĄ a $ {ŚCIEŻKĄ}?
Zazwyczaj zmienna jest wyświetlana tylko bez pieczęci podczas ustawiania zmiennej. FOO=bar
ustawia FOO
zmienną środowiskową na ciąg bar
. Jeśli wpiszesz set
, 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:
$ FOO=bar
$ echo $FOO
bar
$ echo $FOOx
$ echo ${FOO}x
barx
W drugim echo
poleceniu powłoka nic nie drukuje, ponieważ prosi powłokę o wydrukowanie zmiennej o nazwie FOOx
, która nie istnieje; powłoka traktuje nieistniejące zmienne jako puste. Ponieważ trzeci echo
używa składni nawiasów klamrowych, pozwala powłoce zobaczyć, że żądasz FOO
zmiennej, i że x
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:
$ echo "$FOO"x
barx
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 dobrze PATH
, ponieważ jest to kolejna zmienna środowiskowa. Przykładowe teksty byłyby o wiele dłuższe.
Co oznacza ścieżka eksportu? Kiedy eksportujemy?
Biorąc powyższy FOO
przykład, gdybyś uruchomił inny program, nie zobaczyłby FOO
zmiennej, ponieważ nie jest eksportowany. Żyje 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ą 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 drugie bash
wystąpienie, wyeksportowałem je, uruchomiłem bash
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.