-
Zajímalo by mě, zda jsou následující dva způsoby spuštění bash skriptu
ekvivalentní?. ./myScript.sh source myScript.sh
- Spouštějí oba obsah skriptu namísto spouštění skriptu, tj. nevytvářejí podskořápku pro spuštění skriptu?
Přijatá odpověď:
-
Jsou ekvivalentní v bash v tom, že dělají přesně to samé. Na druhou stranu
source
je o 5 znaků delší a není přenosný do shellů pouze POSIX nebo Bourne, zatímco.
(tečka) je, takže se nikdy neobtěžuji používatsource
. -
To je správné – zdrojový soubor spustí příkazy v aktuálním prostředí a ovlivní vaše aktuální prostředí prostředí. Stále můžete předat argumenty zdrojovému souboru a bash bude skutečně vypadat v
$PATH
pro název souboru stejně jako běžný příkaz, pokud neobsahuje žádná lomítka.
Nesouvisí s původní otázkou .
vs source
, ale ve vašem příkladu
. ./myScript.sh
není totožné s
source myScript.sh
protože zatímco .
a source
jsou funkčně identické, myScript.sh
a ./myScript.sh
nejsou stejné. Od ./myScript.sh
obsahuje lomítko, je interpretováno jako cesta a shell používá pouze ./myScript.sh
. Nicméně myScript.sh
nemá lomítko, takže shell udělá $PATH
nejprve to vyhledejte. Toto je standardní chování specifikované POSIXem pro .
. Většina shellů je výchozí, ačkoli mohou přidávat rozšíření (jako je vyhledávání v aktuálním pracovním adresáři po hledání cesty) nebo možnosti pro změnu chování .
/source
.