Как правильно сценарий ожидать - PullRequest
0 голосов
/ 29 мая 2018

Вполне ожидаемый и ожидающий некоторых предложений по этому поводу:

Я пытаюсь подключиться к ssh к серверам и выполнить некоторые команды.

Если сервер является тем, на который я вхожу в первый раз, он запрашивает, хочу ли я доверять ему.Я выбираю «да»;вот почему у меня первое ожидание
Второе ожидание относится к паролю.

  1. Когда я делаю следующее, он принимает либо первое, либо второе приглашение, поэтому это не работает дляя
expect {
   "yes/no" {
      send "yes\n"
   }
   "assword: " {
      send "$mypass\n"
   }
}
Когда я делаю следующее, это работает, но очень долго ждет, пока не введет пароль.Я подозреваю, что он ждет приглашения «да / нет» в течение определенного времени, не получает его и затем продолжает
expect "yes/no" {
      send "yes\n"
   }

expect "assword: " {
      send "$mypass\n"
   }

Я хотел бы знать, какой правильный способ установитьэто вверх.

1 Ответ

0 голосов
/ 29 мая 2018

Когда вы разбиваете его на 2 отдельные команды, вы заставляете скрипт сначала искать приглашение «да / нет».Он будет ждать до $ тайм-аут секунд (по умолчанию 10 секунд).Только тогда он будет искать запрос пароля.

Ваша первая идея - правильный подход, но вам не хватает одной ключевой команды:

expect {
   "yes/no" {
      send "yes\r"
      exp_continue    ;# <== this
   }
   "assword: " {
      send "$mypass\r"
   }
}

Команда exp_continue по существу заставляет командупоток выполнения остается в этой ожидаемой команде, так что вы все равно можете сопоставить запрос пароля.

Незначительная точка: идиоматически, используйте \r (возврат каретки) в качестве символа для "нажатия Enter".

Для дальнейшего изучения, посмотрите на тег для получения дополнительной информации и ссылок на другие вопросы и ответы.

...