GNU/Linux >> Tutoriels Linux >  >> Linux

La différence entre l'approvisionnement ('.' ou 'source') et l'exécution d'un fichier dans Bash ?

Quelle est la différence entre l'exécution d'un script comme celui-ci :

./test.sh

et exécuter un script comme celui-ci :

. test.sh ?

J'ai essayé un script simple de deux lignes pour voir si je pouvais trouver s'il y avait une différence :

#!/bin/bash
ls

Mais les deux . test.sh et ./test.sh renvoyé les mêmes informations.

Réponse acceptée :

./test.sh exécute test.sh en tant que programme distinct. Il peut s'agir d'un script bash, si le fichier test.sh commence par #!/bin/bash . Mais ça pourrait être autre chose.

. ./test.sh exécute le code du fichier test.sh à l'intérieur de l'instance en cours d'exécution de bash. Cela fonctionne comme si le fichier de contenu test.sh avait été inclus textuellement au lieu du . ./test.sh doubler. (Presque :quelques détails diffèrent, comme la valeur de $BASH_LINENO , et le comportement du return intégré.)

source ./test.sh est identique à . ./test.sh dans bash (dans d'autres shells, source peut être légèrement différent ou ne pas exister complètement ; . pour l'inclusion est dans la norme POSIX).

La différence la plus visible entre l'exécution d'un script séparé avec ./test.sh et en incluant un script avec le . intégré est que si le test.sh script définit certaines variables d'environnement, avec un processus séparé, seul l'environnement du processus enfant est défini, alors qu'avec l'inclusion de script, l'environnement du seul processus shell est défini. Si vous ajoutez une ligne foo=bar dans test.sh et echo $foo à la fin du script d'appel, vous verrez la différence :

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

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

Linux
  1. Linux :Différence entre /dev/console , /dev/tty et /dev/tty0 ?

  2. Quelle est la différence entre /sbin/nologin et /bin/false ?

  3. La différence entre /opt et /usr/local ?

  4. La différence entre .exrc et .vimrc ?

  5. La différence entre '$ . Foo' Et '$ ./foo' ? ?

La différence entre plus, moins et la plupart des commandes

La différence entre les liens symboliques et les liens matériels ?

Comprendre les fichiers /proc/mounts, /etc/mtab et /proc/partitions

Quelle est la différence entre &> et >&en bash ?

Différence entre /bin et /usr/bin

Quelle est la différence entre /tmp et /run ?