我正在编写一个expect
脚本来处理过多的提示。
bash
我正在使用的脚本可以遵循以下两个顺序之一:
prompt1 -> prompt2 -> prompt3
prompt1 -> prompt3
也就是说,有时我不明白prompt2
。因此,我的问题是:如何编写一个expect
脚本来检查prompt2
,如果存在,则发送 ay
并进一步继续,否则它只会继续。
编辑:感谢@glenn 的输入和答案!我会尽力使问题更清楚,以防将来对其他人有所帮助。我正在处理的特定bash
脚本是从服务器下载一些数据。通常,当我执行脚本时会发生以下情况:
Do you want to download data from *server name*?
y
Do you want to download data from *some directory within server*?
y
...
然而,有时,当我执行这个脚本时,我还没有连接到服务器。因此,我在脚本中包含了一部分,用于检查我是否已连接到服务器。如果我没有,它会给我另一个提示,如下所示:
Do you want to download data from *server name*?
y
Looks like you are not connected to *server name*! Want to connect now?
y
Do you want to download data from *some directory within server*?
y
...
答案1
我怀疑这就是你想要的:expect
等待的命令任何一个“提示2”或者“提示3”
expect "prompt1"
send "answer to prompt1\n"
expect {
"prompt2" {send "y\n"; exp_continue}
"prompt3"
}
send "answer to prompt3\r"
exp_continue
基本上是一个循环:保留在这个expect命令中并继续寻找列出的模式。
“prompt3”没有相应的动作,因此expect命令结束。