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


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

#!/bin/bash
. /etc/vz/vz.conf

71
2017-12-26 14:56


origine




Réponses:


C'est un synonyme du intégré source. Ce sera exécuter des commandes à partir d'un fichier dans le shell en cours, tel que lu de help source ou help ..

Dans votre cas, le dossier /etc/vz/vz.conf sera exécuté (très probablement, il ne contient que des affectations de variables qui seront utilisées plus tard dans le script). Il diffère de la simple exécution du fichier avec, par exemple, /etc/vz/vz.conf à bien des égards: le plus évident est que le fichier n'a pas besoin d'être exécutable; alors vous penserez à le lancer avec bash /etc/vz/vz.conf mais cela ne l'exécutera que dans un processus enfant et le script parent ne verra aucune modification (par exemple, des variables) que l'enfant effectue.

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.


86
2017-12-26 15:01



Juste une note: . fonctionnera dans la plupart des shells (sh, ash, ksh, etc.), source est spécifique à bash. - Dmytro Sirenko
@EarlGray source n'est pas juste bash - c'est dans les coquilles de style C (csh, tcsh) - et zsh aussi. . travaille dans des coquilles de style Bourne, y compris ceux listés. Considérant que bash est un shell de type Bourne et quasiment aucun script bash de complexité non triviale est susceptible de s'exécuter dans un shell de style C, c'est vrai . devrait être considéré comme beaucoup plus portable. Mais bash source synonyme de . existe en partie pour la portabilité. - Eliah Kagan
@EliahKagan oui, vous avez raison; il vaut mieux dire que . est universellement portable et source est largement répandu, mais ne fonctionne pas en clair sh. - Dmytro Sirenko


Lorsqu'un script est exécuté en utilisant `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       . filename [arguments]

  source filename [arguments]

4
2018-04-24 12:39