2016-05-31 6 views
1

Я работаю над скриптом для автоматизации инструкций на маршрутизаторе Cisco IOS с использованием команд ожидания.Последняя команда ожидания не выполнена

Вот сценарий я написал:

#!/bin/expect 
#log_user 0 
set timeout 60 

set mode [lindex $argv 0] 
spawn ssh [email protected] 


expect "*assword:" { 
    send "mypassword\r" 
} 

expect "*>" { 
    send "enable \r" 
} 

expect "*#" { 
    send "conf t \r" 
} 

expect "*(config)" { 
     send "interface Serial0/0/0 \r" 
     send "clock rate 14400\r" 
} 

Моя проблема, этот скрипт останавливается на "router1 (конфигурации) #" состояние. Но если я положил команду interact в конце моего скрипта, все это работает правильно. Пользователь правильно переходит в режим конфигурации интерфейса, а тактовая частота хорошо обновляется. Но факт в том, что я не хочу, чтобы пользователь взаимодействовал.

Так что я действительно не понимаю, что происходит, и почему я не могу просто закончить сценарий, как это ...

Если у вас есть какие-либо улики ...?

+0

запустите свой сценарий с 'expect -d' и просмотрите вывод отладки, чтобы увидеть, соответствуют ли ваши шаблоны. –

ответ

1

Мне, наконец, удалось решить мою проблему самостоятельно.

Немного обманывает, но ... хорошо работает.

Учитывая, что это последняя expect команда, которая не работает, я добавил последний «бесполезно ожидать» в конце моего сценария:

expect "*(config)" { 
     send "interface Serial0/0/0 \r" 
} 
expect "*(config-if)" { 
     send "clock rate 14400\r" 
} 
expect "*(config-if)" { 
     send "end" 
     close 
} 

Во всяком случае, если кто-то есть правильный способ сделать я все еще открыт

+0

Это проблема. Ваша * передача * слишком быстро и не дожидается завершения процесса 'ssh' до * exit *. – pynexj

+0

Да, но даже если у меня был * sleep 5 * в конце скрипта, он все равно не работает ... – Razaborg