Bonjour,
j'aimerai savoir quelle est la différence entre lancer un script bash avec ce modèle:
#./script.sh
et le modèle
#. ./script.sh
je parle bien sur du point et l'espace en plus
Merci d'avance
Bonjour,
j'aimerai savoir quelle est la différence entre lancer un script bash avec ce modèle:
#./script.sh
et le modèle
#. ./script.sh
je parle bien sur du point et l'espace en plus
Merci d'avance
Bonjour,
Il y a peut-être d'autres impacts mais je connais au moins celui-ci:
Supposons le script suivant:
Code script.sh : Sélectionner tout - Visualiser dans une fenêtre à part export oO=Oo
Avec la commande ./script.sh, il rien ne va se passer dans ton environnement. le script va travailler dans un environnement dédié (copie de l'environnement courant) et n'altérera ni ne créer la variable $oO
En revanche, avec la commande . ./script.sh, la valeur de la variable $oO dans le shell qui exécute la commande va être altérée.
La conséquence, c'est ça:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 tarnaud:/Users/tarnaud/test>./script tarnaud:/Users/tarnaud/test>echo $oO tarnaud:/Users/tarnaud/test>. ./script tarnaud:/Users/tarnaud/test>echo $oO Oo
En shell le point (".") est built-in synonyme du buit-in "source". Donc ". ./script" est strictement équivalent à "source ./script".
Quand tu fais "./script", ton shell courant fork un nouveau process qui va exécuter la commande indiquée par la ligne #! de ton script, et c'est ce sous-process qui va interpréter ton script.
Quand tu fais ". ./script" ou "source ./script", ton shell courant va interpréter ton script lui-même.
Bonjour,
Pour expliquer le pourquoi du comment, il faut savoir que bash interprète le premier mot comme le nom de la commande à exécuter (ce n’est pas toujours vrai, mais on va rester simple). bash sépare les mots par les espaces blancs.
Ici, il n’y a qu’un seul mot (le premier, forcément). C’est donc cette commande qui est exécutée, dans un sous-shell (d’où le fait que l’environnement d’origine ne soit pas altéré par la commande).
Code : Sélectionner tout - Visualiser dans une fenêtre à part ./script.sh
Ici, la commande est « . », avec l’argument « ./script.sh ». « . » est une commande intégrée de bash (il n’y a pas de fichier « /bin/. » à exécuter). Elle exécute les commandes du script dans le shell courant (d’où l’altération de l’environnement d’origine, comme expliqué par Nudger).
Code : Sélectionner tout - Visualiser dans une fenêtre à part . ./script.sh
EDIT : arf, grillé
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager