# BASH problème sépérateur

**URL:** <https://www.debian-fr.org/t/bash-probleme-seperateur/63334>\
**Category:** Programmation\
**Created:** [Février 21, 2016, 8:42 UTC](https://www.debian-fr.org/t/bash-probleme-seperateur/63334 "2016-02-21T20:42:08Z")\
**Posts on this page:** 12\
**Page:** 1

<div class="post-metadata">

**Author:** ![\_seb](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/_/90db22/32.png) [@\_seb](https://www.debian-fr.org/u/_seb)\
**Post date:** [Février 21, 2016, 8:42 UTC](https://www.debian-fr.org/t/bash-probleme-seperateur/63334/1 "2016-02-21T20:42:08Z")

</div>

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 :

> [@](#):
>
> NAME=test1  
> URL=[http://test.local/test.php?token=def3a3cd0f&id=1](http://test.local/test.php?token=def3a3cd0f&id=1)  
> DATE=23/08/2014  
> TIME=00:00:00

le code du script bash est le suivant :

```auto
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

> [@](#):
>
> [http://test.local/test.php?token=](http://test.local/test.php?token=)

au lieu de :

> [@](#):
>
> [http://test.local/test.php?token=def3a3cd0f&id=1](http://test.local/test.php?token=def3a3cd0f&id=1)

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

Merci ![:023](https://www.debian-fr.org/uploads/default/original/1X/3c587556c0cc11389317c03a60788d77ceebd307.gif "OK")

---

<div class="post-metadata">

**Author:** ![Mimoza](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mimoza/32/3858_2.png) [@Mimoza](https://www.debian-fr.org/u/Mimoza)\
**Post date:** [Février 21, 2016, 8:42 UTC](https://www.debian-fr.org/t/bash-probleme-seperateur/63334/2 "2016-02-21T20:42:10Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![anon29980398](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/f4b2a3/32.png) [@anon29980398](https://www.debian-fr.org/u/anon29980398)\
**Post date:** [Février 21, 2016, 8:42 UTC](https://www.debian-fr.org/t/bash-probleme-seperateur/63334/3 "2016-02-21T20:42:11Z")

</div>

[Debugging Bash scripts](http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_02_03.html)  
[Bash-Beginners-Guide.pdf (fr)](http://guidespratiques.traduc.org/guides/vf/Bash-Beginners-Guide/Bash-Beginners-Guide.pdf)

---

<div class="post-metadata">

**Author:** ![\_seb](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/_/90db22/32.png) [@\_seb](https://www.debian-fr.org/u/_seb)\
**Post date:** [Février 21, 2016, 8:42 UTC](https://www.debian-fr.org/t/bash-probleme-seperateur/63334/4 "2016-02-21T20:42:12Z")

</div>

Bonjour,

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

---

<div class="post-metadata">

**Author:** ![Mitsu](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/f475e1/32.png) [@Mitsu](https://www.debian-fr.org/u/Mitsu)\
**Post date:** [Février 21, 2016, 8:42 UTC](https://www.debian-fr.org/t/bash-probleme-seperateur/63334/5 "2016-02-21T20:42:13Z")

</div>

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`

---

<div class="post-metadata">

**Author:** ![\_seb](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/_/90db22/32.png) [@\_seb](https://www.debian-fr.org/u/_seb)\
**Post date:** [Février 21, 2016, 8:42 UTC](https://www.debian-fr.org/t/bash-probleme-seperateur/63334/6 "2016-02-21T20:42:22Z")

</div>

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:](https://www.debian-fr.org/uploads/default/original/1X/78536cf08b5cbccb06a10e44ddb8da50bfc1554d.gif "Doh!")

---

<div class="post-metadata">

**Author:** ![agentsteel](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/97f17d/32.png) [@agentsteel](https://www.debian-fr.org/u/agentsteel)\
**Post date:** [Février 21, 2016, 8:42 UTC](https://www.debian-fr.org/t/bash-probleme-seperateur/63334/7 "2016-02-21T20:42:30Z")

</div>

une problématique que se rapproche de la tienne

[verifier-variables-d-un-fichier-de-conf-t49287.html](https://www.debian-fr.org/verifier-variables-d-un-fichier-de-conf-t49287.html)

---

<div class="post-metadata">

**Author:** ![anon29980398](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/f4b2a3/32.png) [@anon29980398](https://www.debian-fr.org/u/anon29980398)\
**Post date:** [Février 21, 2016, 8:42 UTC](https://www.debian-fr.org/t/bash-probleme-seperateur/63334/8 "2016-02-21T20:42:32Z")

</div>

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:

```auto

```

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.

---

<div class="post-metadata">

**Author:** ![ripat](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/r/bc79bd/32.png) [@ripat](https://www.debian-fr.org/u/ripat)\
**Post date:** [Février 21, 2016, 8:42 UTC](https://www.debian-fr.org/t/bash-probleme-seperateur/63334/9 "2016-02-21T20:42:34Z")

</div>

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](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.

---

<div class="post-metadata">

**Author:** ![\_seb](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/_/90db22/32.png) [@\_seb](https://www.debian-fr.org/u/_seb)\
**Post date:** [Février 21, 2016, 8:42 UTC](https://www.debian-fr.org/t/bash-probleme-seperateur/63334/10 "2016-02-21T20:42:37Z")

</div>

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](https://www.debian-fr.org/uploads/default/original/1X/65b1b73704eec538091c0e1d04a633b3840a284f.gif "picole")

Si un paramètre (PARAM=VALEUR) fait 79 caractères pas de problème ![:041](https://www.debian-fr.org/uploads/default/original/1X/bfe857c9119752799c3eac55ca37a50312c51282.gif "applaudit")  
=\> OK LINK\_TEST=[http://cxxcvvvvvxxxcnnvcee.fr/mo/p/testpage.php?t=def3a3cd0f&id\_var=1](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](https://www.debian-fr.org/uploads/default/original/1X/0287f377b0e103e172422ffbbe8c639fd3e12c9e.gif "vertige")  
=\> PAS OK LINK\_TEST=[http://cxxcvvvvvxxxcnnvcee.fr/mo/p/testpage.php?t=def3a3cd0f&id\_var=1Z](http://cxxcvvvvvxxxcnnvcee.fr/mo/p/testpage.php?t=def3a3cd0f&id_var=1Z)

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

> [@](#):
>
> 00000000 4c 49 4e 4b 5f 54 45 53 54 3d 68 74 74 70 3a 2f |LINK\_TEST=http:/|  
> 00000010 2f 63 78 78 63 76 76 76 76 76 78 78 78 63 6e 6e |/cxxcvvvvvxxxcnn|  
> 00000020 76 63 65 65 2e 66 72 2f 6d 6f 2f 70 2f 74 65 73 |[vcee.fr/mo/p/tes|](http://vcee.fr/mo/p/tes%7C)  
> 00000030 74 70 61 67 65 2e 70 68 70 3f 74 3d 64 65 66 33 |tpage.php?t=def3|  
> 00000040 61 33 63 64 30 66 26 69 64 5f 76 73 61 72 3d 0a |a3cd0f&id\_vsar=.|  
> 00000050 31 5a 20 4e 41 4d 45 3d 61 64 6d 69 6e 40 74 6f |1Z NAME=admin@to|  
> 00000060 74 6f 2e 6e 65 74 0a |to.net.|  
> 00000067

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

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

---

<div class="post-metadata">

**Author:** ![\_seb](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/_/90db22/32.png) [@\_seb](https://www.debian-fr.org/u/_seb)\
**Post date:** [Février 21, 2016, 8:42 UTC](https://www.debian-fr.org/t/bash-probleme-seperateur/63334/11 "2016-02-21T20:42:37Z")

</div>

Je pense avoir trouvé une option W3M intéressante "-cols" ![:007](https://www.debian-fr.org/uploads/default/original/1X/e72d3b45191f9b2363aa21bfae6f42497bc4042b.gif "yeux-coeur")

---

<div class="post-metadata">

**Author:** ![anon29980398](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/f4b2a3/32.png) [@anon29980398](https://www.debian-fr.org/u/anon29980398)\
**Post date:** [Février 21, 2016, 8:42 UTC](https://www.debian-fr.org/t/bash-probleme-seperateur/63334/12 "2016-02-21T20:42:37Z")

</div>

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](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]
