Вопрос

Я запускаю приложение, которое запрашивает пароль пользователя примерно дюжину раз:-( Я попытался использовать 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
}
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top