Введите пароль несколько раз
Вопрос
Я запускаю приложение, которое запрашивает пароль пользователя примерно дюжину раз:-( Я попытался использовать expect, чтобы обойти эту проблему и запустить ее в автоматическом режиме, но не могу справиться с проблемой многократного ввода пароля, который не совсем статичен.Иногда он задает запрос 4-5 раз, а иногда около 9-10 раз.
Есть ли лучшее решение проблемы, чем то, что я привел ниже:
spawn myApp [lindex $argv 0]
expect " password: $"
send "$password\r"
expect {
" password: $" send "$password\r"
"^Rollout Done "
"^Rollout Updated "
}
С помощью приведенного выше решения я смог перехватить пароль только дважды, а затем вручную начать ввод в остальное время, возможен ли цикл с паролем?
Решение
Посмотрите на exp_continue ( продолжение ) команда - она предотвращает текущее [expect]
команда из returning, чтобы он мог найти любые последующие запросы на ввод пароля.
spawn myApp [lindex $argv 0]
expect {
-re { password: $} {
send "$password\r"
exp_continue
}
-re {^Rollout (?:Done|Updated) }
}
Если вы хотите, чтобы пользователь вводил пароль, а не сохранял его в виде обычного текста в скрипте, см. Как я могу создать ожидаемый запрос скрипта на ввод пароля?
Другие советы
Expect может использовать циклы - я думаю, это просто TCL с некоторыми добавленными командами.Так что просто сделай
set found 0
while {$found < 1}
{
expect {
" password: $" send "$password\r"
"^Rollout Done " set found 1
"^Rollout Updated " set found 1
}
}