Problème d'echo dans un bash à devenir DINGUE !

Bonjour à tous,

Je n’aime pas m’inscrire sur un forum juste pour quémander de l’aide mais aujourd’hui il m’arrive un problème un peu dingue. J’ai embêtté la moitié de l’IRC français ainsi que Twitter avant de venir ici vous poser ma question.

Voila mon script :

#===============================
#Keywords.txt (1 w/ligne) :

#php
#css
#html
#===============================

#!/bin/bash
while read line
do
        echo "blabla $line hoho"
done < keywords.txt

#Ce script retourne en théorie :
#blabla php hoho
#blabla css hoho
#blabla html hoho
#et c'est bien le cas sur mon desktop (ubuntu)

#Voila ce qu'il retourne sur mon serveur Debian :
# hohoa php
# hohoa css
# hohoa html
#(avec un espace devant chaque ligne)

Voila un autre debug test intéressant et le retour de mon serveur :

#sans "hoho" derrière $line

#!/bin/bash
while read line
do
        echo "blabla $line"
done < keywords.txt

#aam@ks359180:~/tools/autofollow$ ./test.sh 
#blabla php
#blabla css
#blabla html

Le fait de rajouter du texte derrière $line fait tout planter.
J’ai essayé :
[ul]
De changer le nom de la variable $line
De redémarrer mon shell
D’utiliser sh au lieu de bash
J’ai écris moi même le contenu de keywords.txt sur le serveur (pas de caractère fantôme d’encodage…)
[/ul]

J’utilise la dernière version de Debian Stable (noyau 2.6.38.2-grsec-xxxx-grs-ipv6-64 #1 SMP Fri Apr 15 17:44:15 UTC 2011 x86_64 GNU/Linux, un kimsufi OVH avec la distro de base, pas la release OVH)
Je deviens fou ! :frowning: En vous remerciant mille fois par avance de m’aide à trouver la cause de ce problème,

KaLeD

[quote=“KaLeD”]Bonjour à tous,

Je n’aime pas m’inscrire sur un forum juste pour quémander de l’aide mais …[/quote]Et pourquoi, si nous proposons d’aider, quand on le peut, c’est que ça nous fait plaisir aussi.
Ne te gêne pas, tu seras toujours le bienvenu.
Par contre, pour ce qui est de la programmation, nous avons une section ad hoc : “programmation” :smiley: . Il serait ptet judicieux d’y placer ta demande aussi.

EDIT :
Je viens de la faire en copie.
Suis donc aussi d’éventuelles réponses dans l’autre section.
:006

oui, c’est avec plaisir que j’aiderai sur ce forum même si je ne suis pas une bête en Debian !
Mince, je n’avais pas fait attention pour le forum programmation. Peux-tu y déplacer mon sujet ? Je ne sais pas si j’ai la possibilité de le faire entant que simple membre.

Merci

EDIT : je viens de voir le déplacement, merci Ricardo !

C’était déjà fait, lire au dessus en EDIT.

N’aurais-tu pas des fins de ligne windows par hasard? Que donne

Salut Ripat,

Voila le résultat de la commande :

M$ comme… Micro$oft ? (troll inside!)
Trêve de plaisanteries, comme interpréter ce résultat à ton avis ?

Tu devrais d’abord nettoyer ton fichier des caractères exotiques. Une possibilité:

[quote]tr -d ‘\r’ < keywords.txt > keywords.unix
while read line
do
echo "blabla $line kjlkajdlkzaj"
done < keywords.unix[/quote]

Ripat, incroyable, ça fonctionne ! Je ne te remercierai jamais assez.
Mais voila, j’aimerai comprendre pourquoi cela fait ça sur ma Debian et pas ailleurs (et pas chez les autres !).

D’autant plus que j’ai écris le contenu de keywords.txt depuis ssh, via Ubuntu, à la main sans copier/coller. Alors pourquoi ?

Merci encore.

[quote=“KaLeD”]Ripat, incroyable, ça fonctionne ! Je ne te remercierai jamais assez.
Mais voila, j’aimerai comprendre pourquoi cela fait ça sur ma Debian et pas ailleurs (et pas chez les autres !).

D’autant plus que j’ai écris le contenu de keywords.txt depuis ssh, via Ubuntu, à la main sans copier/coller. Alors pourquoi ?

Merci encore.[/quote]

Je viens de trouver la réponse : j’étais sûr d’avoir déjà supprimé au moins une fois le fichier keywords.txt pour repartir de 0. Finalement non. Et j’ai du le modifier UNE FOIS sur Windows, ça a suffit pour laisser des traces des retours-chariots.

Mille merci encore une fois, tu me sauves vraiment la vie !

KaLeD

Le retour chariot (cr ou \r) est un anachronisme typiquement Windows* qui date d’une époque où il fallait faire revenir le chariot ou la tête d’impression en début de ligne avant de passer à la suivante. Pourquoi deux caractères de fin de ligne alors qu’un seul suffit?

Ce qui me tue c’est que les RFC du SMTP, MIME, POP et HTTP continuent à l’utiliser comme fin de ligne! Un peu poussiéreux ces protocoles.

  • Mac l’a également longtemps utilisé comme fin de ligne mais seul, sans line feed.

Edit: Viens de trouver une explication “mécanique” au CRLF:

[quote]Back in the dark ages BC (Before Computers), there existed a magical device called a Teletype Model 33. This amazing machine contained a shift register made out of a motor and a rotor as well as a keyboard ROM consisting solely of levers and springs.

It contained a keyboard, a printer and a paper tape reader/punch. It could transmit messages over the phones using a modem at the blazing rate of 10 characters a second.

The Teletype had a problem. It took 2/10 second to move the printhead from the right side to the left. 2/10 second is two character times. If a second character came while the printhead was in the middle of a return, it was lost.

The Teletype people solved this problem by making end of line two characters: to position the printhead at the left margin, and to move the paper up one line. That way the “printed” while the printhead was racing back to the left margin. [/quote]