Forum Clubic

[expect] comment recupere t on le contenu du expect

Bonjour,

Dans un premier temps je me connecte sur un equipement distant.

send telnet xxx.xxx.xxx.xxx
expect {
time out { send user “connexion refusé” }
Login:
}
send “login”
expect {
time out { send user “erreur connexion” }
Password:
}
send “password”
expect {
time out { send user “erreur connexion” }
CO:
}
send “$commande”
expect {
time out { send user “commande invalide” }
DATA FROM CURRENT ONFIGURATION
}

Je souhaiterai en plus de verifier le contenue d’un expect, pouvoir réutiliser le retour de mon expect. Cad que le contenu de mon dernier retour contient des informations necessaires pour construire ma prochaine commande.

Merci

Je peux peut être répondre à ta question…
Ci dessous un petit script qui se connecte sur un routeur dump la configuration et met tout en sortie dans un fichier :
#!/usr/bin/expect
set timeout 120
set Machine [lindex $argv 0]
set Username [lindex $argv 1]
set Password [lindex $argv 2]
spawn telnet $Machine
sleep 10
expect {
"Username: " {send “$Username\n”}
}
expect {
"Password: " {send “$Password\n”}
sleep 5
send “sh -ip route\n”
sleep 10
send “exit”
send “\r”
interact
exit

Voilà…il te suffit après de lancer ton script (appelons le toto) :
./toto @ip login password > capture.fic

C’est un script que j’utilise fréquemment et il marche niquel…après tu peux traiter ton fichier avec les commandes bash…
Je fait appel à ce script dans un script bash et le fichier de sortie est traité dans le script bash…

Ok je te remercie. Mais c est ce que je fais actuelement, le redirectionne la sortie dans un fichier et j ai tout le resultat de mes commandes.

Mon probleme c est que la deuxieme commande que je dois envoyer au BAS (equipemement telecom) se construit avec le resultat de la premiere commande. C est ca que j arrive pas a faire car j aimerai stocker le resultat de ma commande send dans une variable, pour extraire les informations nécessaires à la création de ma deuxiemme commande.

Je ne peux pas derouler un script préconsu, c est ca mon probleme…

rien de plus simple…
utilise les filtre grep pour extraire du fichier de sortie la commande…
avec la commande sed, tu peux remplacer des chaines de caractère, histoire d’y placer send " en début de ligne et " en fin de ligne…
enfin, rien ne t’empeche de créer un script expect via le script bash en utilisant des commandes echo ’ ’ et la commande cat que tu rediriges dans un fichier executable…après il te suffit de lancer le script créé via ton script bash. Je suis pas clair peut être… un exemple…j’ai listé la configuration d’un routeur Cisco…je veux extraire les routes pour les supprimer dans un autre routeur…mon fichier s’appelle toto :
les routes sont du style :
ip route 192.168.0.0 255.255.255.0 10.0.0.1

grep “ip route” toto > titi
sed s/"^ip route"/“send “no ip route”/g titi | sed s/”$"/’\n"’/g > tata

normalement on obtient dans tata…a moins ke je me trompe sur les caractères spéciaux :
send “no ip route 192.168.0.0 255.255.255.0 10.0.0.1/n”
explication : j’ai remplacé en début de ligne ip route par : send “no ip route
et en fin de ligne j’insère \n”

ensuite tu construit ton script expect dans ton bash avec des echo et un cat de tata…

voilà