#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
, завершится ли ваша программа в это время и не требуется ли дальнейшее взаимодействие.