GNU/Linux >> Tutoriales Linux >  >> Linux

¿La diferencia entre el abastecimiento ('.' o 'fuente') y la ejecución de un archivo en Bash?

¿Cuál es la diferencia entre ejecutar un script como este:

./test.sh

y ejecutando un script como este:

. test.sh ?

Probé un script simple de dos líneas para ver si podía encontrar si había alguna diferencia:

#!/bin/bash
ls

Pero ambos . test.sh y ./test.sh devolvió la misma información.

Respuesta aceptada:

./test.sh ejecuta test.sh como un programa separado. Puede ser un script bash, si el archivo test.sh comienza con #!/bin/bash . Pero podría ser algo completamente diferente.

. ./test.sh ejecuta el código del archivo test.sh dentro de la instancia en ejecución de bash. Funciona como si el archivo de contenido test.sh se había incluido textualmente en lugar del . ./test.sh línea. (Casi:hay algunos detalles que difieren, como el valor de $BASH_LINENO , y el comportamiento del return integrado.)

source ./test.sh es idéntico a . ./test.sh en bash (en otros shells, source puede ser ligeramente diferente o no existir del todo; . para su inclusión está en el estándar POSIX).

La diferencia más comúnmente visible entre ejecutar un script separado con ./test.sh e incluyendo un script con el . incorporado es que si el test.sh script establece algunas variables de entorno, con un proceso separado, solo se establece el entorno del proceso secundario, mientras que con la inclusión de script, se establece el entorno del único proceso de shell. Si agrega una línea foo=bar en test.sh y echo $foo al final del script de llamada, verá la diferencia:

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

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

Linux
  1. ¿Cuál es la diferencia entre #!/usr/bin/env bash y #!/usr/bin/bash?

  2. ¿Cuál es la diferencia entre fsync y syncfs?

  3. ¿Cuál es la diferencia entre &> y >&en bash?

  4. Linux:diferencia entre /dev/console, /dev/tty y /dev/tty0

  5. ¿Cuál es la diferencia entre /tmp y /run?

La diferencia entre más, menos y la mayoría de los comandos

Linux:¿Diferencia entre /dev/console, /dev/tty y /dev/tty0?

¿La diferencia entre "du -sh *" y "du -sh ./*"?

¿La diferencia entre /opt y /usr/local?

¿La diferencia entre enlaces simbólicos y duros?

Comprender los archivos /proc/mounts, /etc/mtab y /proc/partitions