2016-06-09 2 views
0

Я пытаюсь перезагрузить систему, используя ожидание. Вот мой код:Как вернуться к предыдущему сценарию в ожидании

#!/usr/bin/expect 
set timeout 20 
set name [lindex $arg0] 
set user [lindex $arg1] 
set password [lindex $arg2] 
spawn telnet $name 
expect "login:" 
send "$user\n" 
expect "Password:" 
send "$password\n" 
expect "<system prompt>$" 
send "<some command>\n" 
expect "<system prompt>$" 
send "./my_script\n" --> code is below 
send "<back to the telnet system prompt and running a builtin command>" 
expect "g>" 
send "some built in command" 

Вот код для my_script (я перезагрузки системы здесь, после чего связь теряется и выше сценарий (основной сценарий) заканчивается на линии)

#!/usr/bin/expect 
set name [lindex <some ip>] 
set user [lindex <name>] 
set password [lindex <password>] 
spawn telnet $name 
expect "Login:" 
send "$user\n" 
expect "Password:" 
send "$password\n" 
expect "<system prompt>" 
send "reboot\n" 
expect "Are you sure you want to reboot (y/n)?" 
send "y" 

Здесь он потерял соединение и никогда не возвращается к основному скрипту и продолжает работу с остальным скриптом.

ПРИМЕЧАНИЕ: он работает, если я положил взаимодействие в конце обоих скриптов, но я не хочу, чтобы мы взаимодействовали, поскольку мы ничего не хотим от пользователя.

+0

Выполнение встроенных команд не происходит, что указано в главном скрипте? – Dinesh

ответ

0

Ваш внутренний сценарий, вероятно, следует сделать:

expect eof 
close 
exit 

в конце. Тем не менее, в более общем плане следует добавить:

exp_internal 1 

в сценарий (обычно как раз перед spawn) при отладке его так, что вы можете понять, что происходит не так. В противном случае вы можете столкнуться с неожиданными проблемами и не знать этого.

Смежные вопросы