Есть большой скрипт на expect где часто авторизовываться. Хочу сделать proc что бы авторизация была в одном месте, а не писать каждый раз ее.
Но получаю ошибку:
spawn /usr/bin/telnet 10.0.1.1
: spawn id exp8 not open
Как передать этот spawn id в функцию?
Если включить дебаг, то выдает следующее, есть подозрение что spawn убивается или дисконектится перед вызовом функции. Если так, то как этого избежать?
spawn /usr/bin/telnet 10.0.113.8
parent: waiting for sync byte
parent: telling child to go ahead
parent: now unsynchronized from child
spawn: returns {2358}
exp8
exp_i_parse_states: : spawn id exp8 not open: spawn id exp8 not open
Код:
proc Login {pflag} {
global login
global password
while {1} {
expect {
timeout { send_user "Timout"; return 0; }
-re "Username" { send "$login\r"; }
-re "Password:" { send "$password\r";}
-re $prompt { send "\r"; break;}
eof { send_user "Something wents wrong\n"; return 0;}
}
}
return 1;
}
spawn $telnet $ipaddress
if {[Login $flag]} {
expect -re $prompt { send "sh sw\r";}
}