Expect / Exp_Send仅适用于连续两个期望值

时间:2013-08-21 23:20:54

标签: tcl expect

我有一个tcl脚本应该向服务器发送一个grep命令,但是只有在我之后立即使用exp_send预期另一个期望时才会执行该命令。

set spawn_id [::SshLibrary::connect **.***.**.*** username password] ;#just ssh, essentially 
set cmd "grep \"$str\" /var/log/syslog/$smtsIp"
expect -re $::LinuxLIbrary::prompt { exp_send "$cmd\r"}
expect -re $::LinuxLibrary::prompt { exp_send "echo \" \"\r }
...

所以,通过实验,我发现第一个期望只有exp_send它的命令,如果第二个期望语句存在(类似于第二个期望命令,关于第一个的存在),即使他们期望相同事情和第二个声明完全没用。我不确定问题是什么,看起来完全不合逻辑。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

您的第一个命令已发送,结果字符串已成功收到。但返回的字符串将保留在缓冲区中,直到您调用另一个'expect'。这是缓冲I / O的常见情况。 在没有exp_send的情况下尝试第二个'expect'。