Je le savais que ça branlait dans le manche à ce niveau là !
(j'aime bien les titres mystérieux, ça pousse à lire
)

Figurez-vous que depuis que je prépare le cocci-kit, ça fait donc........ ouh la la...... au moins ça...... je suis régulièrement tombé nez à nez avec des bugs totalement incompréhensibles, de purs plantages en fait, lors de la rédaction de scripts qui parfois n'avaient que 3 lignes. Tout était bon, la syntaxe et tout et tout. Donc pour comprendre sur quelle ligne ça coinçait, il fallait les commenter une à une, relancer le script, et voir ou ça coinçait. Quand ça ne fonctionnait toujours pas, il fallait non plus commenter mais supprimer les lignes une à une, et recommencer le processus de débogage. Et là, que ne constate-je pas : que ce sont des lignes de commentaires qui sont capables de faire planter un script !!!
Mais comment se fesse ?
J'avais un (très) vague souvenir d'avoir déjà lu le pourquoi du comment, mais là j'ai eu un flash suite à de nouveaux plantages pour la même raison, car je ne me souvenais plus du truc. J'ai donc fait quelques recherches avec mon ami Google en me basant sur mon flash (
"::" instead of "REM" inside a batch file
Les batchiens ont-ils percuté où je veux en venir ? Je développe.
Dans un fichier batch, REM en début de ligne introduit un commentaire (REMark en anglais). Une alternative consiste toutefois à ajouter :: au début d'une ligne à la place d'un REM pour un effet similaire et un code plus lisible. Les deux-points agissent comme un GOTO ou un CALL :label, mais comme le deuxième deux-points n'est pas valide en tant que nom de label, il est toujours traité comme un label sans effet, et donc la ligne est toujours ignorée. Comme elle le serait pour un simple REM.
Le gros avantage du double point :
Le gros avantage du REM :
Lorsque :: est utilisé pour marquer un commentaire dans un bloc de code entre parenthèses, le processeur de commandes s'attend raisonnablement à ce que chaque étiquette soit suivie d'au moins une commande. En fait, le shell CMD tente d'exécuter la deuxième ligne même si elle est formatée en étiquette. Tout ce qui n'est pas une commande valide, même une ligne vide ou une parenthèse fermante, fera donc échouer un commentaire de style :: , concrètement le script se termine brutalement et sans prévenir comme s'il avait été fermé par une commande EXIT. Et voilà d'où venaient mes insidieux plantages... Pétard que je suis heureux d'avoir redécouvert ça !
Un exemple tout simple à tester : ce script va planter dès qu'il atteindra le commentaire :
Code : Tout sélectionner
(
Echo Salut les coccinautes !
:: C'était un message d'amour
)
Code : Tout sélectionner
(
Echo Salut les coccinautes !
REM C'était un message d'amour
)
Code : Tout sélectionner
(
Echo Salut les coccinautes !
:: c'était un message d'amour
Echo Vous allez bien ?
)
Site web de SS64
Plus d'infos sur REM
https://ss64.com/nt/rem.html
Plus d'infos sur REM
https://ss64.com/nt/rem.html