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: