我正在尝试远程登录系统并在该系统上执行许多命令。所以我正在尝试这个期望的脚本:
#!/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会话后可以执行多个命令。
那么我正在做的这个剧本有什么问题?
答案 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会话。