GNU/Linux >> Znalost Linux >  >> Linux

Spuštění skriptu s „. “ A se „zdrojem“?

  1. Zajímalo by mě, zda jsou následující dva způsoby spuštění bash skriptu
    ekvivalentní?

    . ./myScript.sh
    
    source myScript.sh
    
  2. 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ěď:

  1. 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žívat source .

  2. 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 .


Linux
  1. Zabránění souběžnému spuštění bash skriptu

  2. Kontrola, zda skript běží?

  3. Shell skript s funkcí a parametrem jako proměnnými?

  1. Importujte funkce a proměnné do Bash pomocí příkazu source

  2. Paralelní spuštění skriptu shellu

  3. základní jméno s mezerami ve skriptu bash?

  1. Jak zachytit terminálové relace a výstup pomocí příkazu skriptu Linux

  2. Nahrajte svůj terminál pomocí skriptu a scriptreplay

  3. Trim s Lvm a Dm-crypt?