0

我有一个 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 它的命令(对于第二个期望命令,关于第一个期望的存在),即使他们期望相同的东西并且第二个语句完全没用。我不确定问题是什么,这似乎完全不合逻辑。有什么建议么?

4

1 回答 1

0

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

于 2013-08-21T23:28:42.947 回答