我正在用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)
我怎样才能做到这一点?
你的问题是双重的......
你应该与一个明确的交互return,并给它一些方法来知道你已经释放控制...在这种情况下,我使用三个加号并点击回车.
在您返回控制之后,脚本将需要再次获得提示,这意味着在将控制权返回到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)