Podczas korzystania z powłoki bash czasami trzymam zmienne środowiskowe w pliku tekstowym, który kopiuję / wklejam, np. Exports.txt:
export FOO=bar
export FIZZ=buzz
Ktoś pokazał mi zamiast kopiować / wklejać, mogłem wpisać terminal
. exports.txt
co miałoby taki sam efekt jak kopiowanie / wklejanie.
Jaki jest mechanizm działania tego polecenia „nazwa pliku przestrzeni kropkowej”? Trudno wymyślić wyszukiwane hasła.
Chcę zrozumieć, co się dzieje i bardziej ogólne szczegóły tego, co robi ten liniowiec.
help .
Jest tak krótki, że silnik Stack Exchange uważa, że jest zbyt krótki, aby być komentarzem.'. ' args
pojedyncze lub podwójne cudzysłowy. W przeciwnym razie niecytowane miejsce zostanie zjedzone przez bash, kiedy parsuje linię na tokeny (patrz „dzielenie słów” w instrukcji bash)..
tosource
, co dosłownie oznacza „polecenia źródłowe z tego pliku”, przynajmniej dla mnie.Odpowiedzi:
Polecenie
.
(„kropka”) jest synonimem / skrótem do wbudowanegosource
polecenia powłoki .Powoduje, że nazwany skrypt powłoki jest wczytywany i wykonywany w bieżącym kontekście powłoki (a nie w podpowłoce). Umożliwia to skryptowi źródłowemu modyfikowanie środowiska powłoki wywołującej, na przykład ustawianie zmiennych oraz definiowanie funkcji powłoki i aliasów.
źródło
source
jest niestandardowym i nieprzenośnym synonimem / skrótem do zdefiniowanej przez POSIX.
komendy „dot” ( ), a nie na odwrót.source
i niestandardowy.
w trybie innym niż POSIX, z których oba przeszukują bieżący katalog, nawet jeśli nie jest on częścią$PATH
. W trybie POSIX zapewnia standard,.
który nie przeszukuje bieżącego katalogu i niesource
. W żadnym trybie nie jestsource
synonimem.
polecenia POSIX .Chociaż dwie istniejące odpowiedzi są już doskonałe, wydaje mi się, że brakuje przykładu, w którym efekt jest najbardziej „zauważalny”.
Powiedz, że mam plik
script.sh
o następującej treści:Gdybym uruchomił ten skrypt normalnie (
sh script.sh
), zobaczyłbym to:Ale jeśli mam gdzie zdobyć skrypt (
. script.sh
), skończyłbym tak:Zauważ, jak w drugim przypadku zmienił się katalog roboczy naszej głównej powłoki!
To dlatego, że (jak wskazano w innych odpowiedzi) pierwszy przykład uruchamia we własnym podpowłoce (w
sh
procesie Zaczynamysh
-polecenie, to mogło być w zasadzie dowolny powłoki,bash
,dash
, to nazwę), zmienia się tam katalog, nic nie robi i zamyka. Podczas gdy drugi przykład działa w naszej głównej powłoce, zmienia katalog tam!źródło
Oto przykład.
Plik skryptu: mytest.sh
jeśli spróbujesz wydrukować dowolną z powyższych zmiennych, nic nie otrzymasz
ale jeśli tak
lub
i wtedy
wydrukuje 1
Tylko wizualna odpowiedź na to, co napisał Spiff
źródło
export
jest tylko wtedy, gdy te zmienne mają być używane w podpowłokach. Mógłbym pominąćexport
w pliku, jeśli zmienne mają być używane tylko w bieżącej powłoce. Czy to prawda?