En un script bash, ¿qué significa un punto seguido de un espacio y luego un camino?

83

Encontré este ejemplo al intentar montar un dispositivo usb dentro de un contenedor openvz y nunca antes había visto la construcción en la segunda línea. ¿Puedes explicar lo que significa?

#!/bin/bash
. /etc/vz/vz.conf
Denis Connolly
fuente

Respuestas:

98

Es un sinónimo de la construcción source. Será ejecutar comandos desde un archivo en el shell actual , como leer help sourceo help ..

En su caso, el archivo /etc/vz/vz.confse ejecutará (muy probablemente, solo contiene asignaciones variables que se utilizarán más adelante en el script). Difiere de simplemente ejecutar el archivo, por ejemplo, /etc/vz/vz.confde muchas maneras: lo más obvio es que el archivo no necesita ser ejecutable; entonces pensará en ejecutarlo, bash /etc/vz/vz.confpero esto solo lo ejecutará en un proceso secundario, y el script principal no verá ninguna modificación (p. ej., de variables) que realice el elemento secundario.

Ejemplo:

$ # Create a file testfile that contains a variable assignment:
$ echo "a=hello" > testfile
$ # Check that the variable expands to nothing:
$ echo "$a"

$ # Good. Now execute the file testfile with bash
$ bash testfile
$ # Check that the variable a still expands to nothing:
$ echo "$a"

$ # Now _source_ the file testfile:
$ . testfile
$ # Now check the value of the variable a:
$ echo "$a"
hello
$

Espero que esto ayude.

gniourf_gniourf
fuente
14
Solo una nota: .funcionará en la mayoría de los shells (sh, ash, ksh, etc.), sourcees específico para bash.
Dmytro Sirenko
3
@EarlGray sourceno es solo bash, está en shells de estilo C ( csh, tcsh) y zsh también. .funciona en conchas de estilo Bourne, incluidas las enumeradas . Teniendo en cuenta que bash es un shell de estilo Bourne y que es probable que casi ningún script de bash de complejidad no trivial se ejecute en un shell de estilo C, es cierto que .debería considerarse mucho más portátil. Pero el sourcesinónimo de bash .existe en parte para la portabilidad.
Eliah Kagan
1
@EliahKagan sí, tienes razón; Es mejor decir que .es universalmente portátil y sourceestá muy extendido, pero no funciona de manera simple sh.
Dmytro Sirenko el
5

Cuando un script se ejecuta usando 'source' se ejecuta dentro del shell existente, cualquier variable creada o modificada por el script permanecerá disponible una vez que se complete el script.

Sintaxis nombre de archivo [argumentos]

  source filename [arguments]
Suresh Kumar
fuente