GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Der Unterschied zwischen Sourcing (‚.‘ oder ‚source‘) und dem Ausführen einer Datei in Bash?

Was ist der Unterschied zwischen der Ausführung eines Skripts wie diesem:

./test.sh

und Ausführen eines Skripts wie diesem:

. test.sh ?

Ich habe ein einfaches, zweizeiliges Skript ausprobiert, um zu sehen, ob ich einen Unterschied feststellen kann:

#!/bin/bash
ls

Aber beide . test.sh und ./test.sh gab die gleichen Informationen zurück.

Akzeptierte Antwort:

./test.sh führt test.sh aus als separates Programm. Es kann sich um ein Bash-Skript handeln, wenn die Datei test.sh beginnt mit #!/bin/bash . Aber es könnte auch etwas ganz anderes sein.

. ./test.sh führt den Code der Datei test.sh aus innerhalb der laufenden Instanz von bash. Es funktioniert so, als ob die Inhaltsdatei test.sh anstelle des . ./test.sh Linie. (Fast:es gibt ein paar Details, die sich unterscheiden, wie zum Beispiel der Wert von $BASH_LINENO , und das Verhalten des return eingebaut.)

source ./test.sh ist identisch mit . ./test.sh in bash (in anderen Shells source kann etwas anders sein oder überhaupt nicht vorhanden sein; . für die Aufnahme ist im POSIX-Standard).

Der am häufigsten sichtbare Unterschied zwischen dem Ausführen eines separaten Skripts mit ./test.sh und Einfügen eines Skripts mit dem . eingebaut ist das wenn die test.sh script setzt einige Umgebungsvariablen, bei einem separaten Prozess wird nur die Umgebung des untergeordneten Prozesses gesetzt, während bei der Skripteinbindung die Umgebung des einzigen Shell-Prozesses gesetzt wird. Wenn Sie eine Zeile foo=bar hinzufügen in test.sh und echo $foo Am Ende des aufrufenden Skripts sehen Sie den Unterschied:

$ cat test.sh
#!/bin/sh
foo=bar
$ ./test.sh
$ echo $foo

$ . ./test.sh
$ echo $foo
bar

Linux
  1. Wie behandelt Linux mehrere aufeinanderfolgende Pfadtrennzeichen (/home////username///file)?

  2. Was ist der Unterschied zwischen #!/usr/bin/env bash und #!/usr/bin/bash?

  3. Was ist der Unterschied zwischen fsync und syncfs?

  4. Was ist der Unterschied zwischen der Ausführung eines Bash-Skripts und dessen Beschaffung?

  5. Linux:Unterschied zwischen /dev/console , /dev/tty und /dev/tty0

Der Unterschied zwischen mehr, weniger und den meisten Befehlen

Linux:Unterschied zwischen /dev/console , /dev/tty und /dev/tty0?

Der Unterschied zwischen „du -sh *“ und „du -sh ./*“?

Der Unterschied zwischen symbolischen und harten Links?

Der Unterschied zwischen „$ . Foo‘ und ‚$ ./foo‘??

Die Dateien /proc/mounts, /etc/mtab und /proc/partitions verstehen