linux - 使用交互式响应动态响应期望

标签 linux shell unix command expect

我正在寻找使用 unix expect 命令来包装 eb init

这是我想要的 API。

eb-init.exp --region=eu-central-1 --app=my-app --env=my-app-live

这是我当前的脚本:

set timeout -1
spawn $env(SHELL)
match_max 100000
send -- "eb init\r"
expect  "Select a default region"
send -- "5\r"
expect "Select an application to use"
send -- "1\r"
expect "Select the default environment"
send -- "1\r"
send -- "exit\r"
expect eof

我需要一种方法来与 expect 的响应进行交互,并使用命令的输入参数将行串起来。例如,如果以下是命令返回的内容,它与 expect "Select a default region" 匹配,我想使用参数 eu-central-1并获得数字 5 并动态响应。

Select a default region
1) us-east-1 : US East (N. Virginia)
2) us-west-1 : US West (N. California)
3) us-west-2 : US West (Oregon)
4) eu-west-1 : EU (Ireland)
5) eu-central-1 : EU (Frankfurt)
6) ap-south-1 : Asia Pacific (Mumbai)
7) ap-southeast-1 : Asia Pacific (Singapore)
8) ap-southeast-2 : Asia Pacific (Sydney)
9) ap-northeast-1 : Asia Pacific (Tokyo)
10) ap-northeast-2 : Asia Pacific (Seoul)
11) sa-east-1 : South America (Sao Paulo)
12) cn-north-1 : China (Beijing)
(default is 3):

这怎么可能?

最佳答案

像这样尝试:

set region "eu-central-1"
expect "Select a default region"
expect -re "\[\[:space:]]+(\[0-9]+)\\) $region *:"
expect "(default is *):"
send $expect_out(1,string)\r

关于linux - 使用交互式响应动态响应期望,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40752437/

相关文章:

linux - 如何在 sed 中将命令的结果作为字符串参数输入

linux - 如何从 shell 脚本中 unix 命令的输出中的特定行获取特定单词?

linux - bash:语法错误:需要操作数(错误标记为 "-")

shell - 比较 awk 中的两列并将查找文件中的值打印到输出文件中

java - 提取 tar 文件时无效的用户/用户组

linux - 合并排序的文件,缓冲最少

regex - 如何使用sed匹配和剪切不同条件的字符串?

java - 捕获进程 ID 并终止它的最简单方法是什么?

bash - 使 bash 中的命令超时,避免不必要的延迟

C、Bash - 运行 bash 脚本并在同一文件上并行工作的进程