Expect脚本仅在使用交互时提供输出

时间:2014-02-05 10:45:13

标签: ssh telnet expect

我正在写一个关于我正在写的期望脚本的一个奇怪的问题。基本上,我有服务器A和服务器B.服务器B只能通过服务器A的telnet访问(不要问......)。

这意味着,我通过SSH连接到服务器A,telnet到服务器B,然后运行该命令以获取指定用户的大量信息。现在,当我在最后放置'interact'时脚本工作正常,但当我删除它时,脚本不再给我输出。这是粗略的脚本,它现在只是一个概念验证,所以忽略了没有错误/条件等的事实:

#!/usr/bin/expect -f
log_file "/tmp/temporarylog.log"

set timeout 30

set user [lindex $argv 0]

# connect to server A
send_user "Connecting to server A...\n";
spawn ssh user@servera.com

expect "assword: "
send "password123\n"

expect "# "
send "telnet serverb.com 6002\n"

expect "> "
send "login passwordabc\n"
send "user info $user\n"

# removing this line results in no output
interact

运行上面的脚本可以获得所有用户信息。删除'interact'脚本似乎telnet到serverb.com但不使用'login'或'user info'。

交互是脚本的最后一部分,所以它让我感到困惑的是它为什么会破坏它之前的东西 - 这是我的第一个期望的脚本。

任何帮助表示感谢。

1 个答案:

答案 0 :(得分:1)

使用以下命令结束脚本:

expect "> "
send "exit\r"
expect "# "
send "exit\r"
expect eof

使用send\r终止您的\n字符串 - \ r是回车符,这是按Enter键发送的内容。