-
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
sourceje 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
$PATHpro 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 .