#expect
Вопрос:
У меня есть следующий сценарий:
#!/usr/bin/expect -f
# Set variables
set hostname [lindex $argv 0]
set username [lindex $argv 3]
set password [lindex $argv 1]
set devname [lindex $argv 4]
set enablepassword [lindex $argv 2]
set conft 0
# Log results
log_file -a ~/scripts/ExpectScripts/9120CiscoAPs/results.log
# Announce which device we are working on and at what time
send_user "n"
send_user ">>>>> Working on $hostname $devname @ [exec date] <<<<<n"
send_user "n"
# Don't check keys
set timeout 30
spawn ssh -o StrictHostKeyChecking=no -o ConnectTimeout=30 $username@$hostname
expect "User:"
send "$usernamen"
expect "Password:"
send "$passwordn"
expect "*>"
set f [open "aprebootlist2.txt"]
set aps [split [read $f] "n"]
close $f
foreach ap $aps {
send "config ap reset $apn"
expect {
"*n)" {send "yn"}
"*invalid." {send "r"}
}
expect eof
close
}
send "r"
expect "*>"
send "logoutn"
expect "*(y/N)"
send "nr"
exit
Это должно войти в беспроводной контроллер cisco и в основном выполнить команду «ap config reset apvariable» несколько раз. Я попытался создать цикл, получая переменную для имени точки доступа из текстового файла. Скрипт входит в контроллер, считывает первое имя в файле, после чего происходит сбой с приведенной ниже ошибкой. Что я делаю не так?
Ошибка заключается в:
Cisco Controller) >send: spawn id exp6 not open
while executing
"send "config ap reset $apn""
("foreach" body line 2)
invoked from within
"foreach ap $aps {
send "config ap reset $apn"
expect {
"*n)" {send "yn"}
"*invalid." {send "r"}
}
expect eof
..."
(file "./rebootapcommands2.exp" line 29)
Комментарии:
1. Почему вы закрываете созданное соединение внутри цикла? Вот почему она не открыта.
2. Итак, мне нужно поставить оператор close после последнего } ?