Dominique Meeùs
Dernière modification le
retour à la table des matières
— à l’index
— à ma page de départ
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.