我有一个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它的命令,如果第二个期望语句存在(类似于第二个期望命令,关于第一个的存在),即使他们期望相同事情和第二个声明完全没用。我不确定问题是什么,看起来完全不合逻辑。有什么建议吗?
答案 0 :(得分:0)
您的第一个命令已发送,结果字符串已成功收到。但返回的字符串将保留在缓冲区中,直到您调用另一个'expect'。这是缓冲I / O的常见情况。 在没有exp_send的情况下尝试第二个'expect'。