Detecter un retour chariot CR, LF ou CRLF

Le
Kevin Denis
Bonjour,

Dans un script, comment détecter à coup sur un retour chariot?

Je suis en train d'écrire un micro serveur web à base de script shell.
L'écoute se fait à l'aide de socat.

Or, cela ne fonctionne pas avec tous les clients.

Mon script récupère basiquement les en-têtes envoyés par le client:
#! /bin/bash
content=entete
while [ ! "$content" == "" ]
do
read content
echo $content >> log
done

echo "HTTP/1.0 OK"
()

Et cela fonctionne avec wget par exemple. La première ligne d'entete
envoyé par le client est récupéré dans mon fichier de log, puis wget
m'affiche le fichier.
Or, avec links, cela ne fonctionne pas. La raison en est simple, mon
fichier de log me montre que toutes les lignes sont terminées par ^M
et donc ma boucle while ne termine jamais.

D'ou ma question: un client web doit terminer ses entetes par deux retours
chariot successifs; dit autrement, il doit renvoyer une ligne d'entete
vide.
Comment détecter cette ligne vide à coup sur quel que soit le client
et la manière dont il code ses fins de lignes?
Merci
--
Kevin
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Stephane CHAZELAS
Le #16480181
2008-08-05, 09:03(+00), Kevin Denis:
[...]
Comment détecter cette ligne vide à coup sur quel que soit le client
et la manière dont il code ses fins de lignes?


[...]

Enleve les CR

CR=$(printf 'r')
while
IFS= read -r line &&
line=${line%"$CR"} &&
[ -n "$line" ]; do
...
done

Mais quelle idee saugrenue d'utiliser un shell script for un
serveur web!? C'est juste demander du trouble.

--
Stéphane
Publicité
Poster une réponse
Anonyme