我想知道如何在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"
在输入1后的上述代码中,代码应等待屏幕上出现“Bye world \ r ......”字符串。但即使屏幕提示完全不同的字符串,代码也会执行下一行并输入选项2,这不应按照expect的定义进行。它应该等到expect命令中的完整字符串匹配。
我想知道是否有任何更严格的命令可以使用,以便等到发生精确的字符串匹配。请帮我解决这个问题
答案 0 :(得分:5)
您之前已在脚本中使用它:expect -exact
。但长匹配的字符串几乎可以保证导致问题;您应该尝试将其剪切为最短的唯一匹配,如果需要将其分成多个expect
命令。
在这种情况下,根据您显示的内容,正确的命令可能是expect -exact "choice:"
。但是,如果没有可能的程序输出的完整细节,就不可能确定这一点。