Dans un script bash, que signifie un point suivi d'un espace puis d'un chemin?

83

Je suis tombé sur cet exemple en essayant de monter un périphérique USB dans un conteneur openvz et je n’avais jamais vu la construction dans la deuxième ligne auparavant. Pouvez-vous expliquer ce que cela signifie?

#!/bin/bash
. /etc/vz/vz.conf
Denis Connolly
la source

Réponses:

98

C'est un synonyme de construit source. Il exécutera les commandes d’un fichier du shell en cours , à partir de help sourceou help ..

Dans votre cas, le fichier /etc/vz/vz.confsera exécuté (très probablement, il ne contient que des affectations de variables qui seront utilisées plus tard dans le script). Cela diffère de la simple exécution du fichier avec, par exemple, /etc/vz/vz.confde nombreuses manières: la plus évidente est que le fichier n'a pas besoin d'être exécutable; vous penserez alors à l'exécuter avec bash /etc/vz/vz.confmais cela ne l'exécutera que dans un processus enfant et le script parent ne verra aucune modification (par exemple de variables) effectuée par l'enfant.

Exemple:

$ # 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
$

J'espère que cela t'aides.

gniourf_gniourf
la source
14
Juste une remarque: .fonctionnera dans la plupart des obus (sh, ash, ksh, etc.), sourceest spécifique à bash.
Dmytro Sirenko
3
@EarlGray sourcene se limite pas à bash, c’est dans des shells de style C ( csh, tcsh), mais aussi à zsh. .fonctionne dans des coquilles à la Bourne, y compris celles énumérées . Etant donné que bash est un shell de style Bourne et que pratiquement aucun script bash de complexité non triviale n'est susceptible de s'exécuter dans un shell de style C, il est vrai qu'il .devrait être considéré comme beaucoup plus portable. Mais le sourcesynonyme de bash .existe en partie pour la portabilité.
Eliah Kagan
1
@EliahKagan oui, vous avez raison; il est préférable de dire qu'il .est universellement portable et sourcerépandu, mais ne fonctionne pas en clair sh.
Dmytro Sirenko
5

Lorsqu'un script est exécuté avec "source", il s'exécute dans le shell existant, toutes les variables créées ou modifiées par le script resteront disponibles une fois le script terminé.

Syntaxe. nom de fichier [arguments]

  source filename [arguments]
Suresh Kumar
la source