在expect中使用if语句检查逻辑

时间:2012-06-21 12:51:44

标签: expect

我有一个场景,我将连接到远程机器并执行命令(优先级),期望它给出一个输出。我正在检查确切的模式,如果成功,我需要打开一个由上面执行的命令创建的文件。

我需要去指定的目录并打开文件并解析我正在使用tcl的相同内容,代码如下所述

#!/home/pub/bin/expect -f
spawn telnet 172.16.67.213 23 
expect "login name:"
send "administrator\r"
expect "password:"
send "Administrator1@\r"
expect "Windows NT Domain:"
send "\r"    
expect "C:\WINNT\Profiles\Administrator>"
send "\r"
expect "C:\WINNT\Profiles\Administrator>"
send "x -j Y -a run -d\r"
sleep 60
expect "ZZ"

****if {[string match *Z* $expect_out(buffer)]} {
        send "dir";} else {
    puts "Script failed";
    }****

这里脚本正在执行,直到字符串匹配,并且成功时,下一个命令发送“dir”不会被执行。

如果我替换下面的逻辑,我得到了echo语句,但是如果我想执行其他命令,如果它没有成功,则会安装。

**if {[string match *Z* $expect_out(buffer)]} {
        puts "Script passed";} else {
    puts "Script failed";
    }**

我希望问题很明确,我正在尝试所有方法,但没有成功..

提前致谢, Kamesh。

1 个答案:

答案 0 :(得分:0)

dir与换行符一起发送将触发命令:

send "dir\n"

现在命令执行但输出可能看不到(由脚本打印到stdout),直到后续的预期匹配。要立即刷新(比如脚本调试),请使用:set timeout 1; expect; expect *