BASH problème sépérateur

Bonjour,

J’essaye de récupérer une URL envoyée par une page html depuis un script bash, le problème est que l’URL retournée par le script est coupée au premier = .

Le résultat de la page HTML (test.html) est le suivant :

le code du script bash est le suivant :

GET=$(w3m -dump htp://192.168.1.18/test.html)
_NAME=${GET}
_URL=${GET}

# Affectation de la valeur NAME
_NAME="${_NAME#*NAME=}"
_NAME_="$(echo "${_NAME}" | head -n 1)"

# Affectation de la valeur URL
_URL="${_URL#*URL=}"
_URL="$(echo "${_URL}" | head -n 1)"

Le résultat du script sera

au lieu de :

Je pense que le problème vient du = comme séparateur !
Comment faire pour récupérer l’URL entière ?

Merci :023

met des guillemet " autour de ton URL, ça évitera l’interprétation du signe =

Debugging Bash scripts
Bash-Beginners-Guide.pdf (fr)

Bonjour,

Même en rajoutant des guillemets autour de l’URL cela ne fonctionne pas…

si ton résultat est toujours pareil pourquoi ne pas simplement récupérer la page et la traiter comme un fichier ?

imaginons que ton index.html ne contient QUE :

NAME=test1 URL=http://test.local/test.php?token=def3a3cd0f&id=1 DATE=23/08/2014 TIME=00:00:00

wget htp://192.168.1.18/test.html NAME=$(head -1 test.html | tail -1 | sed "s/NAME\=//g") URL=$(head -2 test.html | tail -1 | sed "s/URL\=//g") DATE=$(head -3 test.html | tail -1 | sed "s/DATE\=//g") TIME=$(head -4 test.html | tail -1 | sed "s/TIME\=//g") rm -f test.html

autrement on peut aussi faire un traitement ligne par ligne

wget htp://192.168.1.18/test.html NAME=$(cat test.html | grep "NAME\=" | sed "s/NAME\=//g") ... rm -f test.html

Le résultat html est l’appel d’un webservice.

Comme j’ai déjà plusieurs scripts qui récupèrent le webservice, je ne peux pas traiter le retour comme un fichier, cela ne serait plus cohérent avec le reste du dev :doh:

une problématique que se rapproche de la tienne

verifier-variables-d-un-fichier-de-conf-t49287.html

Il y a ce que le serveur envoie, ce que le client reçoit, ce qui peut s’afficher, ce que l’on voit, et ce que l’on pourra interpréter.

Pourrais-tu nous donner le retour de la commande suivante:

Avec ça, il sera possible de connaître la suite de caractères retournée par le serveur, afin d’adapter le script en conséquence.

Merci.

Bonjour,

fichier test.html

NAME=test1 URL=http://test.local/test.php?token=def3a3cd0f&id=1 DATE=23/08/2014 TIME=00:00:00

Script:

[code]#!/bin/sh

eval $(wget -q -O - http://192.168.1.18/test.html | sed -r ‘s/([A-Z]+=)(.+)/\1"\2"/’)

echo "Variable NAME: "$NAME
echo "Variable URL: "$URL
echo "Variable DATE: "$DATE
echo "Variable TIME: "$TIME
[/code]

Sortie:

Variable NAME: test1 Variable URL: http://test.local/test.php?token=def3a3cd0f&id=1 Variable DATE: 23/08/2014 Variable TIME: 00:00:00

Le traitement sed encadre la valeur des variables du fichier test.html avec des doubles quotes pour en protéger le contenu.

Prudence avec eval! Faut être sûr du contenu de ta page source. Danger d’injection de commandes.

Bonjour à tous,

Je viens de comprendre un début du problème, mais je n’arrive pas à m’expliquer le pourquoi !!!

En fait le problème vient du dump effectué par w3m :030

Si un paramètre (PARAM=VALEUR) fait 79 caractères pas de problème :041
=> OK LINK_TEST=http://cxxcvvvvvxxxcnnvcee.fr/mo/p/testpage.php?t=def3a3cd0f&id_var=1

Si un paramètre fait plus de 79 caractères la j’ai le problème :119
=> PAS OK LINK_TEST=http://cxxcvvvvvxxxcnnvcee.fr/mo/p/testpage.php?t=def3a3cd0f&id_var=1Z

w3m -dump htp://192.168.1.18/test.html | hexdump -C

Donc il ne s’agit pas d’un problème de = mais de W3M

Une idée de comment passer outre les 79 chars ?

Je pense avoir trouvé une option W3M intéressante "-cols" :007

Je n’utilise pas [mono]w3m[/mono], mais peut-être qu’en remplaçant [mono]w3m -dump[/mono] par [mono]wget -0-[/mono]
Bien sûr, ç’est pas avec l’application que tu utilise, mais avec [mono]wget[/mono], pas de problèmes de [mono]cols[/mono]

NOTE: Un jour, fait toi plaisir: essaie le mode [mono]debug[/mono] des scripts [mono]bash[/mono].

[quote=“man w3m”]w3m - a text based Web browser and pager[/quote] Et qui dit “browser and pager” dit interpréteur, d’où le problème que tu as rencontré.

=======
EDIT: Une solution pour que [mono]w3m[/mono] n’interprète ou ne modifie pas la page reçue:[quote=“man w3m”]…
-dump_source
dump page source into stdout
…[/quote]
donc:

[code]
GET=$(w3m -dump_source http://192.168.1.18/test.html)
_NAME=${GET}
_URL=${GET}

Affectation de la valeur NAME

_NAME="${_NAME#*NAME=}“
NAME=”$(echo “${_NAME}” | head -n 1)"

Affectation de la valeur URL

_URL="${_URL#*URL=}"
_URL="$(echo “${_URL}” | head -n 1)"[/code]
Finalement : Même pas besoin de [mono]wget[/mono].

[hors sujet]
Adaptation personnelle pour dire comment j’aime Linux et ses applications: [mono]… ♬♪ You can get anything you want in linux applications ♩♫♪…[/mono]
Sur l’air de [mono]Alice’s restaurant[/mono] (Arlo Guthrie’s)
[/hors sujet]