Je suis en train d'essayer de jouer avec expect pour automatiser une
série de transferts par ftp, mais je n'arrive guère qu'à m'énerver en
cherchant vainement comme ça marche...
J'ai regardé le man, mais il est (comme souvent avec les man...)
inutilisable pour apprendre à utiliser expect. Et j'ai pas trouvé de doc
satisfaisante sur le net. En particulier, je suis surpris de l'absence
de doc sur la page principale d'expect (expect.nist.gov), mais bon, passons.
Ce que je n'arrive pas du tout à faire, c'est à récupérer dans des
variables d'expect le résultat de commandes précédentes envoyées par
send. Par exemple, je voudrais récupérer dans toto le contenu de la
variable d'environnement du shell $TOTO, par un truc style :
spawn bash
expect "$ "
send "echo \$TOTO\r"
expect "$ "
set toto $expect_out(1,string)
send "exit\r"
expect eof
# toto devrait contenir la valeur de $TOTO
Sauf que ça marche pas du tout. En fait, je ne capte que dalle à
qu'est-ce qui est stocké dans expect_out et comment le contrôler... Si
je fais 'set toto $expect_out(buffer)', je récupère :
"echo $TOTO
blop
$ "
c'est à dire ma commande lancée par send puis tout jusqu'au expect
suivant. Bon. Mais si j'essaye de matcher différents morceaux de cette
sortie avec expect -re "(.*)$ ", par exemple, ben $expect_out(1,string)
me retourne une erreur (can't read "expect_out(1,string)": no such
element in array). J'ai essayé plein d'autres motifs plus ou moins
compliqués, mais sans plus de succès.
Et pour des commandes aussi simples non-interactives, pas besoin de spawn ni meme d'expect.
Avec expect:
set result [exec $command]
expect "$commandr" ;# discard command echo expect -re "(.*)r" ;# match and save the result
Tu as oublié un "expect prompt"
#afficher le résultat send "echo "result: $expect_out(1,string)"r" expect "$prompt"
-- Stephane
Rémi Moyen
On Sun, 13 Nov 2005 17:51:25 +0100, Rémi Moyen wrote:
Je suis en train d'essayer de jouer avec expect pour automatiser une série de transferts par ftp, mais je n'arrive guère qu'à m'énerver en cherchant vainement comme ça marche...
J'ai regardé le man, mais il est (comme souvent avec les man...) inutilisable pour apprendre à utiliser expect.
[...]
Si tu lis le man dans l'ordre, tu verras qu'ils donnent des conseils de lecture de la page de man.
Je sais, et j'ai suivi. Mais même comme ça, c'est très loin d'être didactique.
C'est pas un reproche en soi, hein. Un manuel de référence, c'est pas la même chose qu'un tutoriel, et je ne me plains pas que 'man' ne soit pas forcément le meilleur des tutoriels. J'aurais bien regardé un tutoriel, mais je n'en ai pas trouvé de satisfaisant.
Note qu'expect est un interpreter TCL avec des fonctions de la libexpect. Tu voudras peut-etre lire un manuel de TCL.
En fait, non. Pas que j'ai quelque chose contre TCL en soi, mais simplement que j'ai pas envie d'apprendre tout un nouveau langage rien que pour utiliser une commande qui va me servir une fois par mois. Je sais, ça pourrait toujours me servir à d'autres moments/endroits, c'est toujours intéressant, etc. Mais si ça me demande un tel investissement, je préfère passer ce temps-là sur des choses qui m'amusent plus :-) -- Rémi Moyen
On Sun, 13 Nov 2005 17:51:25 +0100, Rémi Moyen wrote:
Je suis en train d'essayer de jouer avec expect pour automatiser une
série de transferts par ftp, mais je n'arrive guère qu'à m'énerver en
cherchant vainement comme ça marche...
J'ai regardé le man, mais il est (comme souvent avec les man...)
inutilisable pour apprendre à utiliser expect.
[...]
Si tu lis le man dans l'ordre, tu verras qu'ils donnent des
conseils de lecture de la page de man.
Je sais, et j'ai suivi. Mais même comme ça, c'est très loin d'être
didactique.
C'est pas un reproche en soi, hein. Un manuel de référence, c'est pas la
même chose qu'un tutoriel, et je ne me plains pas que 'man' ne soit pas
forcément le meilleur des tutoriels. J'aurais bien regardé un tutoriel,
mais je n'en ai pas trouvé de satisfaisant.
Note qu'expect est un
interpreter TCL avec des fonctions de la libexpect. Tu voudras
peut-etre lire un manuel de TCL.
En fait, non. Pas que j'ai quelque chose contre TCL en soi, mais
simplement que j'ai pas envie d'apprendre tout un nouveau langage rien
que pour utiliser une commande qui va me servir une fois par mois. Je
sais, ça pourrait toujours me servir à d'autres moments/endroits, c'est
toujours intéressant, etc. Mais si ça me demande un tel investissement,
je préfère passer ce temps-là sur des choses qui m'amusent plus :-)
--
Rémi Moyen
On Sun, 13 Nov 2005 17:51:25 +0100, Rémi Moyen wrote:
Je suis en train d'essayer de jouer avec expect pour automatiser une série de transferts par ftp, mais je n'arrive guère qu'à m'énerver en cherchant vainement comme ça marche...
J'ai regardé le man, mais il est (comme souvent avec les man...) inutilisable pour apprendre à utiliser expect.
[...]
Si tu lis le man dans l'ordre, tu verras qu'ils donnent des conseils de lecture de la page de man.
Je sais, et j'ai suivi. Mais même comme ça, c'est très loin d'être didactique.
C'est pas un reproche en soi, hein. Un manuel de référence, c'est pas la même chose qu'un tutoriel, et je ne me plains pas que 'man' ne soit pas forcément le meilleur des tutoriels. J'aurais bien regardé un tutoriel, mais je n'en ai pas trouvé de satisfaisant.
Note qu'expect est un interpreter TCL avec des fonctions de la libexpect. Tu voudras peut-etre lire un manuel de TCL.
En fait, non. Pas que j'ai quelque chose contre TCL en soi, mais simplement que j'ai pas envie d'apprendre tout un nouveau langage rien que pour utiliser une commande qui va me servir une fois par mois. Je sais, ça pourrait toujours me servir à d'autres moments/endroits, c'est toujours intéressant, etc. Mais si ça me demande un tel investissement, je préfère passer ce temps-là sur des choses qui m'amusent plus :-) -- Rémi Moyen