我怎么说我已经完成了交互模式?

Pkp*_*Pkp 5 expect

我正在用bash编写一些期望命令.

脚本:

#!/bin/bash  
set timeout -1  

expect -c "  

spawn telnet $IP $PORT1  
sleep 1  
send \"\r\"  
send \"\r\"  
expect Prompt1>  
interact timeout 20 {  
sleep 1  
}  

expect {  
Prompt2> {send \"dir\r\" }  
}    

"  
Run Code Online (Sandbox Code Playgroud)

我对脚本的意图是,首先让它telnet到一台机器,当它看到Prompt1时,让它控制我,我将执行一个命令来加载一个特定的图像.然后等待Prompt2显示(表示图像已加载).然后让它执行另一组命令.

运行脚本后,我可以进入交互模式,加载我的图像.问题是在远程计算机上退出交互模式并对其进行控制.

我得到的错误:

expect: spawn id exp4 not open  
    while executing  
"expect -nobrace Prompt2 {send "dir\r" }"  
    invoked from within  
"expect {    
Prompt2 {send "dir\r" }  
}"  
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

Mik*_*ton 6

你的问题是双重的......

  1. 你应该与一个明确的交互return,并给它一些方法来知道你已经释放控制...在这种情况下,我使用三个加号并点击回车.

  2. 在您返回控制之后,脚本将需要再次获得提示,这意味着在将控制权返回到expect之后,您要做的第一件事是发送另一个\r.我编辑了我认为你想要做的事......

示例如下......

#!/bin/bash  
set timeout -1  

expect -c "  

spawn telnet $IP $PORT1  
sleep 1  
send \"\r\"  
send \"\r\"  
expect Prompt1>  
interact +++ return

send \"\r\"
expect {  
Prompt2> {send \"dir\r\" }  
}
"
Run Code Online (Sandbox Code Playgroud)