ожидайте с помощью оболочки для нескольких такск CLI cloud foundry

#shell #expect #cloud-foundry

#оболочка #ожидайте #cloud-foundry

Вопрос:

У меня есть задача создать контейнер docker и проработать его жизненный цикл. Чтобы автоматизировать это, я использую оболочку с ожиданием, поскольку cli cloud foundry является интерактивным, ниже приведен мой код:

          #!/usr/bin/expect -f
         spawn cf login -a <api url>
         #set timeout 30
         expect "Email>"
         send "email idr"
         expect "Password>"
         send "passw0rd"
         expect -exact ">"
         send "2r"
  

До приведенной выше строки код работает так, как ожидалось.Из последних 2 строк выше видно, что я должен ввести 2 в ‘>’. После этого отображается подсказка $, подобная приведенной ниже, которая заканчивается на ‘$’:

         expect "trishal@trishal-VirtualBox:~/PycharmProjects/Trishal-     VC/containers$"
         send "cf ic init"
  

Теперь, после ввода запроса ‘$’, я ожидаю, что код примет ‘cf ic init’, который является командой для инициализации рабочего пространства. Он не принимается, вывод остается в самой строке ‘$’ и не выполняется. Я также пробовал ниже:

          expect -exact "$"
         send "cf ic init"
  

в
trishal@trishal-VirtualBox остается экран неудач: ~/PycharmProjects/Trishal-VC/containers $

Ответ №1:

expect -exact "$" будет работать наверняка, чтобы соответствовать буквальному доллару. Все send команды должны быть отправлены с r помощью клавиши «Enter». После последней команды добавьте expect eof , завершится ли ваша программа в это время и не требуется ли дальнейшее взаимодействие.