Jaký je rozdíl mezi spuštěním skriptu, jako je tento:
./test.sh
a provedení skriptu, jako je tento:
. test.sh
?
Zkoušel jsem jednoduchý dvouřádkový skript, abych zjistil, zda je v tom rozdíl:
#!/bin/bash
ls
Ale oba . test.sh
a ./test.sh
vrátil stejné informace.
Přijatá odpověď:
./test.sh
spustí test.sh
jako samostatný program. Může se stát, že jde o bash skript, pokud je soubor test.sh
začíná #!/bin/bash
. Ale mohlo by to být něco úplně jiného.
. ./test.sh
spustí kód souboru test.sh
uvnitř běžící instance bash. Funguje jako by obsahový soubor test.sh
byl zahrnut textově namísto $BASH_LINENO
a chování návratu
vestavěný.)
zdroj ./test.sh
je identický s . ./test.sh
v bash (v jiných shellech zdroj
může se mírně lišit nebo vůbec neexistuje; .
pro zahrnutí je ve standardu POSIX).
Nejčastěji viditelný rozdíl mezi spuštěním samostatného skriptu s ./test.sh
a včetně skriptu s .
vestavěný je, že pokud test.sh
skript nastavuje některé proměnné prostředí, u samostatného procesu se nastavuje pouze prostředí podřízeného procesu, zatímco při zahrnutí skriptu se nastavuje prostředí jediného procesu shellu. Pokud přidáte řádek foo=bar
v test.sh
a echo $foo
na konci volajícího skriptu uvidíte rozdíl:
$ cat test.sh
#!/bin/sh
foo=bar
$ ./test.sh
$ echo $foo
$ . ./test.sh
$ echo $foo
bar