2016-05-31 1 views
1

Je travaille sur un script pour automatiser les instructions sur un routeur Cisco IOS, en utilisant les commandes expect.La dernière instruction expect n'est pas exécutée

Voici le script que j'ai écrit:

#!/bin/expect 
#log_user 0 
set timeout 60 

set mode [lindex $argv 0] 
spawn ssh [email protected] 


expect "*assword:" { 
    send "mypassword\r" 
} 

expect "*>" { 
    send "enable \r" 
} 

expect "*#" { 
    send "conf t \r" 
} 

expect "*(config)" { 
     send "interface Serial0/0/0 \r" 
     send "clock rate 14400\r" 
} 

Mon problème est, ce script arrête à l'état "router1 (config) n". Mais si je mets une commande interact à la fin de mon script, tout ceci fonctionne correctement. L'utilisateur entre correctement dans le mode de configuration de l'interface et la fréquence d'horloge est bien mise à jour. Mais le fait est que je ne veux pas que l'utilisateur interagisse.

Je ne comprends vraiment pas ce qui se passe et pourquoi je ne peux pas terminer simplement le script comme ça ...

Si vous avez des indices ...?

+0

Exécutez votre script avec 'expect -d' et examinez la sortie de débogage pour voir si vos modèles correspondent. –

Répondre

1

J'ai finalement réussi à résoudre mon problème par moi-même.

C'est un peu truqué mais bon ... ça marche.

Étant donné que c'est la dernière commande expect qui ne fonctionne pas, je l'ai ajouté un dernier « inutile attendre » à la fin de mon script:

expect "*(config)" { 
     send "interface Serial0/0/0 \r" 
} 
expect "*(config-if)" { 
     send "clock rate 14400\r" 
} 
expect "*(config-if)" { 
     send "end" 
     close 
} 

Quoi qu'il en soit, si quelqu'un a une bonne façon de faire Je suis toujours ouvert

+0

C'est exactement le problème. Votre * envoie * trop rapidement et n'attend pas le processus 'ssh' pour * sortir *. – pynexj

+0

Oui, mais même si j'avais un * sleep 5 * à la fin du script, ça ne marche toujours pas ... – Razaborg