Um exemplo parecido com o teu, pode te ajudar.. Uso pra criar a regra de nat em um roteador da embratel:
Paste: http://rafb.net/p/2bfyaa19.html ou wallygator:~ # cat /scripts/nat-rule.expect #!/usr/bin/expect -f spawn telnet 192.168.0.1 expect ".*Type ENTER.*" send "\r" expect ".*ption:.*" send "2" expect "PROSUL>" send "enable\r" expect "PROSUL#" send "show nat-rules\r" expect "NAT rule SSH" { send "exit\r" send "exit\r" expect ".*ption:.*" send "e" expect eof send_user "$expect_out(buffer)" exit 0 } expect "PROSUL#" { send "configure terminal\r" expect "(config)#" send "nat-rule SSH tcp any any eq 2200 change-destination-to 192.168.0.2\r" expect "(config)#" send "interface serial 0\r" expect "(config-if-serial0)#" send "ip nat SSH in\r" send "exit\r" send "exit\r" send "exit\r" send "exit\r" expect ".*ption:.*" send "e" expect eof send_user "$expect_out(buffer)" exit 0 } -- Flávio do Carmo Júnior aka waKKu 2009/4/14 Fabiano Caixeta Duarte <[email protected]>: > > > Senhores, > > Estou precisando extrair umas informações de um switch. Ele infelizmente não > retorna estas informações via SNMP (pelo menos que eu saiba). Então resolvi > fazer um script com expect. > > cat get_mactable.exp > > #!/usr/bin/expect -f > > spawn telnet [lindex $argv 0] > expect { > UserName: { > send sti\r > expect { > PassWord: { > send cnr7pm\r > expect { > "#" { > send "show fdb\r" > send a > } > } > } > } > } > } > > Qual comando devo colocar após o "send a" para que ele jogue na stdin o > resultado do comando? > > Se eu coloco exp_continue após o "send a", ele me retorna o que eu quero. O > problema é que ele entra em loop, uma vez que ele continua encontrando o > prompt "#". > > Toda ajuda é bem-vinda. > > Obrigado! > > PS: tudo que acho na net sobre expect + telnet usa o comando interact do > except. Como eu quero uma solução não-interativa, isto não resolve ;) > >
