[Résolu] Probleme de compréhension d'appel Bash

Bonjour à tous,

Un ami m’a soumis un probleme avec un script shell bash. Je suis incapable de comprendre ce qui se passe … peut être pourrez-vous m’expliquer …

Il est sous Ubuntu. Il doit appeler un script qui modifie le PATH et ajoute qq variables d’environnement.

Dans un premier temps, il a modifié son fichier .profile comme suit:

export AGI_4DX_HOME=/usr/agi/4DX/8.0.2
bash "${AGI_4DX_HOME}"/bin/4DXSetEnv

Le script s’exécture sans erreur mais lorqu’il ouvre un terminal, la variable PATH n’est pas modifiée et les nouvelles variables n’existent pas.

Dans un second temps, il a corrigé sans fichier .profile comme suit:

export AGI_4DX_HOME=/usr/agi/4DX/8.0.2
. "${AGI_4DX_HOME}"/bin/4DXSetEnv

Maintenant, lorsqu’il ouvre un terminal, les variables d’environnement sont correctement positionnées.

SVP, pouvez-vous m’éclairer sur cette différence de comportement ?
Pourquoi mettre “.” en début de commande? Moi, j’ai l’habitude de faire “./monscript” et non pas “. ./monscript”.

Si cela est utile, je peux poster le script en question.

Merci de votre aide.

bash truc.sh (ou ./truc.sh) t’ouvre un sous shell (man fork) fils du shell depuis lequel tu lances cette commande et qui a son propre environnement recopiè de son père. Les modifs que tu y fais ne le concerne que lui, pas son père.
Alors que source truc.sh ou . truc.sh ne lisent pas le shell escape (#!.., cf man exec) et redirigent juste la lecture du fichier dans l’entrée standard du shell courant (comme si tu les tapais).

Merci Matt pour ces éclaircissements. Tout est plus clair maintenant.