Bonsoir,
Quand tu exécute un script depuis ton shell (sh, bash, ksh, csh, ..), celui-ci crée (il "fork" ) un prcessus fils qui va se charger de lire et exécuter les lignes de ton script. Si tu mets comme interpréteur :
au début de ton script et que tu es sous bash par exemple, bash va créer un processus (avec le binare /bin/sh) qui va vivre sa vie pendant l'exécution du script et à la fin, rendre la main au bash.
Tu vois, ce n'est même pas le même binaire qui prend en charge ton script. C'est donc normal que le pauvre bash ne sache pas ce que son défunt fils (/bin/sh) a traficoté pendant sa vie. Le fait que tu mette le même interpréteur pour ton script que ton shell n'y chagera rien. Ton shell lancerait une copie de lui-même, qui à sa mort emportera son env avec elle à la tombe.
Pour que ton shell en cours prenne à sa charge (qu'il "source" ) les instructions de ton script; il faut juste le lui dire :
Ainsi tu lui demande de ne même pas vérivier si tu spécifie un interpréteur. Il ne créra pas de processus fils : il exécutera lui-même les instructions.
C'est en fait comme s'il y avait un tomtom41 virtuel qui tapait le instructions du script une à une dans ta fenêtre shell
Attention : s'il y a du "code actif", il sera exécuté aussi, et ça on l'oublie souvent : les rm et mv .. seront exécutés.. et les exit aussi ! Dans un script à sourcer, il faut mettre uniquement des déclarations (de variables et de fonctions..). Pas conseillé de mettre du traitement..