只有一个命令在expect中执行

时间:2014-08-25 05:17:07

标签: tcl expect

我正在尝试远程登录系统并在该系统上执行许多命令。所以我正在尝试这个期望的脚本:

#!/usr/bin/expect                                                               

spawn telnet localhost 42000                                                    
expect "login:"                                                                 
send "root\r"                                                                   
expect  -re "-sh-4.1#"                                                          
send "echo HELLO\r"                                                             
expect  -re "-sh-4.1#"                                                          
send "echo WORLD\r"   

事实证明,只有第一个echo命令正在执行,然后telnet会话终止。我已经看到了一些期望的例子,在登录到telnet或ssh会话后可以执行多个命令。

那么我正在做的这个剧本有什么问题?

1 个答案:

答案 0 :(得分:2)

您必须提供下一个expect语句,然后只有expect会等待它。

您只需添加一行,如下所示,

#!/usr/bin/expect                                                               

spawn telnet localhost 42000                                                    
expect "login:"                                                                 
send "root\r"                                                                   
expect  -re "-sh-4.1#"                                                          
send "echo HELLO\r"                                                             
expect  -re "-sh-4.1#"                                                          
send "echo WORLD\r"   
expect  -re "-sh-4.1#"                                                          

这是因为没有它我们将错过生成的telnet会话正在发生的事情,因为expect将假设您只需要发送一个字符串值而不期望会话中的任何其他内容并且不再有代码,这就是你的脚本被终止的原因,从而终止你的telnet会话。