Доброе время суток. Никак не могу заставить expect дождаться строки приглашения системы.
Перейду сразу к коду
#!/usr/bin/expect
log_user 1
set timeout 2
set host_name [lindex $argv 0]
set host_pass [lindex $argv 1]
set prompt "(%|#|\\$) $";
catch {set prompt $env(EXPECT_PROMPT)}
if { [string length $host_name] > 0 } {
spawn ssh localadmin@$host_name
expect {
-exact "Are you sure you want to continue connecting (yes/no)? " { send "yes\r"; sleep 2; exp_continue }
sleep 2
-exact "password:" {
sleep 2
send "$host_pass\r"
expect "%"
send "su root\r"
sleep 2
expect "%"
send "$host_pass\r"
expect "%"
send "apt-get upgrade\r"
expect -re "\[Д/н\]?\r"
send "y\r"
expect -re $prompt
send "exit\r"
expect "%"
send "exit\r"
}
}
expect eof
}
Предложение "Хотите продолжить [Д/н]?" обрабатывается верно, но пока апгрейтится система, expect выполняет остальные все команды и завершается.
Как expect заставить нормально ожидать выполнения действий запущенных на удаленной машине?