Le shell n'est pas comme les autres langages de script.
Le shell lit et exécute les commandes une par une, donc la réponse simple est "oui, modifier un script en cours d'exécution peut l'affecter", mais il est important de comprendre les détails.
Si vous faites attention, vous pouvez ajouter des lignes à la fin d'un script en cours d'exécution, et elles seront exécutées après les autres commandes déjà présentes dans le script.
echo "echo 'Cette commande supplémentaire sera également exécutée.'" >> votrescript.sh
Certains éditeurs peuvent écrire un nouveau fichier (inode) avec le même nom que l'ancien ; les modifications apportées de cette manière n'affecteront pas ce que le shell lit (c'est pourquoi ces éditeurs agissent ainsi). Cela complique donc certaines tentatives de test.
Mais tant que vous travaillez toujours avec le même inode, le shell en cours d'exécution sera affecté si le script est modifié au-delà du point où il a été lu - à moins bien sûr qu'il n'invoque exit
avant cela.
La lecture est généralement effectuée par blocs de 4 Ko, de sorte que les petits scripts peuvent sembler s'exécuter sans être affectés, mais lorsqu'ils sont proches de la fin du fichier, le shell (comme tous les programmes de traitement de texte) lira tout ce qu'il peut obtenir. Cette "lecture partielle" ne signale pas en soi la fin du fichier, et le shell continuera à lire jusqu'à ce qu'il ne lise aucun octet. Ainsi, si le fichier s'allonge pendant que le shell le lit, le shell lira les nouvelles données.
Il est important de noter à ce stade que le shell ne tentera pas de lire plus de données tant qu'il n'en aura pas besoin, que ce soit pour terminer d'analyser une commande composée, ou parce qu'il a simplement exécuté toutes les commandes précédentes. Ce délai est l'occasion de modifier le fichier contenant le script.
Donc tout changement qui rendra le fichier plus long aura presque toujours un effet.
Modifier un fichier et insérer N octets au milieu repositionnera les derniers N octets du fichier juste après l'ancienne fin du fichier. Ces octets seront lus comme "nouveaux" par le shell, même s'il les a juste lus à leur position précédente.
Et pour compliquer les choses davantage, comme les limites de bloc et de ligne ne coïncideront probablement pas, le shell peut commencer à lire à mi-chemin à travers une ligne, donnant lieu à l'effet de "charabia". Cela peut se produire si vous ajoutez ou supprimez des lignes qui se trouvent avant la position jusqu'à laquelle le shell a lu.