Введите пароль несколько раз - PullRequest
0 голосов
/ 03 июня 2009

Я запускаю приложение, которое запрашивает пароль пользователя около десятка раз :-( Я попытался использовать функцию «ожидается», чтобы обойти эту проблему и запустить ее в автоматическом режиме, но не смог преодолеть проблему многократного пароля, который не является полностью статическим. Иногда он спрашивает 4-5 раз, а иногда около 9-10 раз.

Есть ли лучшее решение проблемы, чем то, что я дал ниже:

spawn myApp [lindex $argv 0]
expect " password: $"
send "$password\r"
expect {
  " password: $"    send "$password\r"
  "^Rollout Done "
  "^Rollout Updated "
}

При использовании вышеуказанного решения мне удалось только дважды перехватить пароль, а затем начать ввод вручную в течение остального времени. Возможна ли петля с паролем?

Ответы [ 2 ]

3 голосов
/ 04 июня 2009

Найдите команду exp_continue - она ​​предотвращает возврат текущей команды [expect], поэтому она может найти любые последующие запросы пароля.

spawn myApp [lindex $argv 0]
expect {
    -re { password: $} {
        send "$password\r"
        exp_continue
    }
    -re {^Rollout (?:Done|Updated) }
}

Если вы хотите, чтобы пользователь вводил пароль, а не сохранял его в текстовом виде в сценарии, см. Как можно получить запрос сценария для пароля?

0 голосов
/ 03 июня 2009

Expect может использовать циклы - это всего лишь TCL с некоторыми добавленными командами. Так что просто сделай

set found 0
while {$found < 1}
{
expect {
 " password: $"    send "$password\r"
 "^Rollout Done "  set found 1
 "^Rollout Updated " set found 1
}
}
...