Dominique Meeùs
Dernière modification le   
retour à la table des matières — à l’index — à ma page de départ

Fins de ligne

Outre les caractères habituels, les encodages comportent des caractères de service ou de contrôle comme ceux qui marquent la fin d’une ligne. On parle de line ending, new line, end of line… Ces caractères différaient d’un encodage à l’autre, mais ils sont communs dans la lignée d’ASCII. Ceux qui nous intéressent sont le Line feed LF (U+000A, décimal 10, \n) et le Carriage return CR (U+000D, décimal 13, \r) conçus pour commander le mouvement des imprimantes.

If executing a script you get some error like “Shell interpretor bash^M not found”, you have to ask your editor to convert Windows new lines into Linux new lines. Cependant leur usage diffère encore d’un système d’exploitation à l’autre. Les systèmes Windows terminent les lignes par la combinaison CR+LF, tandis que les Mac et Unix, Linux utilisent LF seul. La plupart des éditeurs modernes lisent les deux, mais cela peut faire une différence dans certaines situations.

Si, dans un fichier qui a hérité par accident le style Windows de fin de ligne, on cherche le dernier caractère d’une ligne avec l’éditeur sed, sed trouvera le CR qui précède le LF. Le caractère significatif que l’on voulait vraiment atteindre est dans cette situation l’avant dernier.

Si on part d’un batch file (extension .bat) de Windows pour écrire un script, le shebang #!/bin/bash sera mal compris. Le message d’erreur qu’ « il n’existe pas d’interpréteur de shell bash^M » vient de ce qu’on a dans le fichier la ligne

#!/bin/bash[CR][LF]

au lieu de

#!/bin/bash[LF]

et c’est bash[CR] qui est considéré comme appel de shell au lieu de bash. Il faut alors demander à l’éditeur de transformer les fins de ligne Windows en fins de ligne Linux.

Dominique Meeùs . Date: 2011… 2016