Expect не распознает $pect_out (буфер) или $ hope_out (0, строка) - PullRequest
4 голосов
/ 20 июня 2011

У меня есть Ubuntu 9.10 (и я не могу изменить его в ближайшем будущем из-за тестирования) с ожидаемым5.45. Expect работает, но у меня есть (по крайней мере) две проблемы. Во-первых, ожидаемое не соответствует строке «пароль:». На моей машине ручное взаимодействие выглядит следующим образом:

root@Monkey2:~# rlogin $remoteAddress -l root
root@nn.nn.nnn.nnn's password: 
Linux systest-desktop 2.6.31-22-generic #70-Ubuntu SMP Wed Dec 1 23:51:13 UTC 2010 i686

To access official Ubuntu documentation, please visit:
http://help.ubuntu.com/

72 packages can be updated.
70 updates are security updates.

Last login: Mon Jun 20 13:40:22 2011 from monkey2.local
root@systest-desktop:~# 

Содержимое сценария выглядит следующим образом:

#!/usr/local/bin/expect -f

##  Connect to a neighboring linux box.
spawn ssh nn.nn.nnn.nnn -l root

expect "password:\n"

send "mypassword\n"

send "$expect_out(0,string)"

Сценарий получает и отображает строку, запрашивающую пароль, но время ожидания истекло. Я пытался использовать "пароль:", "пароль:", "пароль: \ r" и пароль: * ", но ни один из них не соответствует.


Вторая проблема заключается в том, что переменнаяpect_out не распознается, и я получаю следующую ошибку при запуске сценария (имя которого 'this' и содержит только 11 строк!):

не может прочитать "pect_out (0, string) ": такой переменной нет во время выполнения "отправить" $pect_out (0, строка) "" (подать строку "this" 18)

1 Ответ

6 голосов
/ 21 июня 2011

Первое, что нужно сделать при отладке ожидаемых программ, это добавить строку в верхней части:

exp_internal 1

Это включает (подробный) вывод отладочной информации, который показывает, что ожидалось увидеть от порожденной программы, и какон соответствует вашим ожиданиям.

Как правило, каждый делает что-то вроде этого:

expect -re {password: $}
send -- "the_password\r"

Вам нужно отправить \r (возврат каретки) вместо \n.

...