Aby dodać do odpowiedzi SLM:
Istnieją dwa sposoby uruchomienia skryptu powłoki. Jednym z nich jest uruchomienie skryptu w osobnym procesie, co oznacza, że wszystko w środowisku powłoki (stan pamięci) powróci do stanu powłoki „macierzystej” przed uruchomieniem procesu powłoki „potomnej”.
Na przykład bieżący katalog roboczy (lokalizacja w systemie plików, w którym znajduje się jeden) jest określany dla poszczególnych procesów. A więc przygotujmy skrypt, który wygląda tak:
#!/bin/bash
cd ~
cd ..
pwd
Tak, nazwijmy to skrypt, och, foo
. Uruchommy ten skrypt w następujący sposób:./foo
Zobaczymy:
/home
(Standardowe zrzeczenie się, że istnieje duża liczba dystrybucji klonów Linux i innych UNIX, z których niektóre nie umieszczają katalogów użytkownika /home
. Lub, jak mówiliśmy „Twój przebieg może się różnić”)
Teraz po uruchomieniu tego skryptu wpiszmy to polecenie
pwd
Aby zobaczyć, w którym katalogu się znajdujemy. Zobaczymy coś takiego:
/home/username
Ponownie dlatego, że skrypt powłoki, który uruchomiliśmy, miał swoje własne środowisko (w tym własny katalog, w którym były uruchamiane polecenia) i środowisko to zniknęło po zakończeniu działania skryptu.
Teraz uruchommy taki foo
skrypt
. ./foo
Lub równoważnie:
source ./foo
Jeśli zrobimy pwd
później, zobaczymy:
/home
Powodem jest: Pozyskanie skryptu nie wywołuje osobnego procesu. To jest jak ręczne wpisywanie wszystkich poleceń w procesie nadrzędnym; jego środowisko jest zachowywane po zakończeniu skryptu.
Pozwól, że przedstawię prostszy przykład. Przygotujmy skrypt, który wygląda następująco:
#!/bin/bash
exit
Nazwijmy to foo
. Zróbmy pewien, że można go uruchomić: chmod 755 foo
. Następnie uruchommy to w ten sposób:
./foo
Nic się nie dzieje. Z drugiej strony, jeśli to zrobimy:
. ./foo
Albo to:
source ./foo
Wylogowujemy się.
Kropka (kropka) to krótka ręka dla wbudowanej bash
source
. Odczyta i wykona polecenia z pliku w bieżącym środowisku i zwróci status wyjścia ostatniego wykonanego polecenia. Pliki mogą znajdować się w bieżącym katalogu lub w dowolnym miejscu wPATH
. Nie musi być wykonywalny.źródło
Jak się dowiedzieć.
źródło
. (operator źródła lub kropki)
Odczytywanie i wykonywanie poleceń z argumentu nazwa pliku w bieżącym kontekście powłoki.
źródło jest synonimem kropki / kropki ”.” w bash, ale nie w POSIX sh, więc dla maksymalnej kompatybilności użyj kropki.
Gdy skrypt jest uruchamiany przy użyciu źródła, działa w ramach istniejącej powłoki, wszelkie zmienne utworzone lub zmodyfikowane przez skrypt pozostaną dostępne po zakończeniu skryptu. W przeciwieństwie do tego, jeśli skrypt jest uruchamiany tak jak nazwa pliku, wówczas osobna podpowłoka (z całkowicie oddzielnym zestawem zmiennych) zostałaby spawnowana w celu uruchomienia skryptu.
Istnieje niewielka różnica między wykonywaniem skryptu przez uruchomienie .ss64script (kropka ss64script) i. ss64script (spacja kropkowa ss64script)
pierwszy uruchamia plik, który został ukryty przed poleceniem 'ls' (chociaż ls -a pokaże ukryte pliki), druga opcja wykona skrypt ss64, nawet jeśli nie został ustawiony jako plik wykonywalny z chmod.
Źródło
źródło
TL; DR
Kropka jest taka sama jak polecenie źródłowe.
source to uniksowe polecenie, które ocenia plik następujący po poleceniu, jako listę poleceń wykonanych w bieżącym kontekście.
Wyodrębniono z https://en.wikipedia.org/wiki/Source_(command)
źródło