Tcl expect中只执行一个命令

Tcl expect中只执行一个命令,tcl,expect,Tcl,Expect,我试图远程登录到一个系统中,并在该系统上执行许多命令。所以我尝试了这个expect脚本: #!/usr/bin/expect spawn telnet localhost 42000 expect "login:"

我试图远程登录到一个系统中,并在该系统上执行许多命令。所以我尝试了这个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会话终止。我看到了一些expect示例,在登录到telnet或ssh会话后可以执行多个命令


那么我正在做的脚本中有什么错误呢?

您必须给出下一个
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会话将假定您只需要发送一个字符串值,而不需要会话中的任何其他内容,并且没有更多的代码,这就是脚本被终止的原因,从而终止telnet会话