GNU/Linux >> Znalost Linux >  >> Linux

Rozdíl mezi získáváním zdrojů („.“ nebo „zdrojem“) a spouštěním souboru v Bash?

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 . ./test.sh čára. (Téměř:existuje několik detailů, které se liší, například hodnota $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

Linux
  1. Jak Linux zpracovává více po sobě jdoucích oddělovačů cest (/home////username///soubor)?

  2. Rozdíl mezi získáváním zdrojů („.“ nebo „zdrojem“) a spouštěním souboru v Bash?

  3. Rozdíl mezi [[ $a ==Z* ]] a [ $a ==Z* ]?

  1. Jaký je rozdíl mezi /sbin/nologin a /bin/false?

  2. Rozdíl mezi symbolickými a pevnými odkazy?

  3. Jaký je rozdíl mezi #!/usr/bin/env bash a #!/usr/bin/bash?

  1. Linux:Rozdíl mezi /dev/console, /dev/tty a /dev/tty0?

  2. Rozdíl mezi „du -sh *“ a „du -sh ./*“?

  3. Jaký je rozdíl mezi &> a >&v bash?