[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: почему тормозит скрипт expect



On 2013-04-26, Владимир Скубриев wrote:

> !/usr/bin/expect -f
>
> spawn kdb5_ldap_util stashsrvpw -D cn=admin,dc=example,dc=lab -w 
> password -f /etc/krb5kdc/service.keyfile cn=kdc,ou=krb5,dc=example,dc=lab
> expect -re "^Password.*"
> send "password\r";
> sleep 1
> expect -re "^Re.*"
> send "password\r";
> send "\n"
> expect eof
> exit
>
> Причем зависает он на несколько секунд после того, как выведет на экран Вторую
> просьбу о вводе пароля для проверки его с первым
>
> Т.е. на фразе
>
> Re-enter password for "cn=kdc,ou=krb5,dc=example,dc=lab":
>
> но потом нормально завершается скрипт. Вопрос в том, почему зависает в конце
> то ?
>

Простите что позно отвечаю ((

Если с expect возникают "странности", сразу включаем режим отладки:

  exp_internal 1

Далее у вас

  expect -re "^Re.*"

Портит все - шапочка. '.*' не все сожрала из буфера expect (размер которого
2000 байт, что не влезно - то потеряно). Сравните как в ман страничке
вычитываю пользовательский ввод ('\n' гарантирует "жадность"):

  expect_user -re "(.*)\n"

По умолчанию задержка 10 секунд. Сравните с тем сколько у Вас )). Меняется
так:

  set timeout 30

Еще у expect скриптов обычно используют стиль без -ge или -re. Т.е. просто:

  expect Password
  send password\r
  expect Re-enter

Наличие

  sleep 1

говорит о плохо спроектированом скрипте. В Вашем случае просто удалите строку
- лишняя...

> И еще посоветуйте что почитать  по expect'у только на русском и чтобы типа
> wiki с примерами. А то что в гугле ни чего подходящего и на русском не нашел.
>
Чтобы быстро вспомнить синтаксис я пользуюсь (автор - вежливая женщина - я
отправлял замечание по опечаткам):

  http://inguza.com/document/expect-and-tcl-mini-reference-manual

Учится можно по "Exploring expect", у меня пол книги заняло неделю...

Бытрее - если вдумчиво по примерам с оффициального сайта:

  http://expect.sourceforge.net/#examples

заглядывая в man страницу...

-- 
Best regards!


Reply to: