Используйте Expect для заполнения многострочного запроса - PullRequest
0 голосов
/ 05 июля 2018

Я пытаюсь использовать Expect для автозаполнения некоторых запросов. В одной из подсказок пользователю предлагается ввести текст, а затем нажать CTR-D, чтобы сохранить текст, или CTR-C, чтобы отменить. Я не знаю точно, но я предполагаю, что программа, которую я пытаюсь автозаполнить, использует cat для записи в файл (например, cat> file.txt).

Ожидается, что не удастся отправить текст в это многострочное приглашение. Когда я выполняю, появляется строка «Ввести описание задачи (^ D, чтобы завершить ввод текста, ^ C, чтобы прервать):», а затем просто зависает, пока не истечет время ожидания. Кто-нибудь знает, как сделать это с помощью Expect?

Мой сценарий:

#!/usr/bin/expect 

spawn tasks create

expect "Task assigned to (default=you): "
send "name\r"

expect "Enter a title: "
send "This is a test\r"

expect "Priority (default=wishlist): "
send "high\r"

expect "Comma-separated list of subscribers (default=None): "
send "None\r"

expect "Comma-separated list of task tags (default=None): "
send "None\r"

 expect "Enter task description (^D to end text entry, ^C to abort): "
 send "Description\r"
 send /004

Результат:

[name@xxxx.xxx ~/createtasks] ./innerscript.exp
spawn tasks create
Task assigned to (default=you): name
Enter a title: This is a test
Priority (default=wishlist): high
Comma-separated list of subscribers (default=None): None
Comma-separated list of task tags (default=None): None
Enter task description (^D to end text entry, ^C to abort):
[name@xxxx.xxx ~/createtasks] 

Кажется, это должно быть просто ... Спасибо!

1 Ответ

0 голосов
/ 09 июля 2018

В конце сценария добавьте:

set timeout -1    ;# wait for as long as necessary
expect eof        ;# for the spawned task to end.
...