如何使expect程序脚本中的expect命令等待精确的字符串匹配

cha*_*itu 6 unix shell scripting expect sh

我想知道如何在expect脚本中使expect命令等待精确的字符串匹配,然后再继续执行脚本中的下一行.

Bourne shell(sh)脚本:

#!/bin/sh
#!/usr/bin/expect

spawn ssh -Y localuser@lbblr-tirumala
expect -exact "localuser@lbblr-tirumala's password: "

# replace password with ur own passwd
send "geomax45\r"

# replace the prompt with ur own prompt
expect "localuser@lbblr-tirumala:~$ "

# run application
send "./sample\r"

expect "*Menu*\r
1. print hello world\r
2. print Bye world\r
3. quit\r
enter choice: "
# enter choice 1
send "1\r"
expect "Bye world\r
*Menu*\r
1. print hello world\r
2. print Bye world\r
3. quit\r
enter choice: $"
# enter choice 2
send "2\r"
Run Code Online (Sandbox Code Playgroud)

在上面的代码输入1之后,代码应该等待"Bye world\r ......"字符串出现在屏幕上.但即使屏幕提示完全不同的字符串,代码也会执行下一行并输入选项2,这不应按照expect的定义进行.它应该等到expect命令中的完整字符串匹配.

我想知道是否有任何更严格的命令可以使用,以便等到发生精确的字符串匹配.请帮我解决这个问题

gee*_*aur 6

您早已在脚本中使用它了: expect -exact。但是,很长的匹配字符串几乎可以保证会导致问题。您应该尝试将其缩减为最短的唯一匹配项,如有必要,可以将其分成多个expect命令。

在这种情况下,仅根据您显示的内容,正确的命令可能就是expect -exact "choice:"。但是从本质上讲,如果没有可能的程序输出的完整详细信息,就不可能确定这一点。