期望不识别$ expect_out(缓冲区)或$ expect_out(0,字符串)

时间:2011-06-20 19:43:22

标签: ubuntu ssh expect

我有Ubuntu 9.10(并且由于测试而不能在不久的将来更改它)和expect5.45。 期待是有效的,但我(至少)有两个问题。 第一个是期望似乎与字符串“password:”不匹配。 在我的机器上,手动交互显示如下:

root@Monkey2:~# rlogin $remoteAddress -l root
root@nn.nn.nnn.nnn's password: 
Linux systest-desktop 2.6.31-22-generic #70-Ubuntu SMP Wed Dec 1 23:51:13 UTC 2010 i686

To access official Ubuntu documentation, please visit:
http://help.ubuntu.com/

72 packages can be updated.
70 updates are security updates.

Last login: Mon Jun 20 13:40:22 2011 from monkey2.local
root@systest-desktop:~# 

脚本的内容如下:

#!/usr/local/bin/expect -f

##  Connect to a neighboring linux box.
spawn ssh nn.nn.nnn.nnn -l root

expect "password:\n"

send "mypassword\n"

send "$expect_out(0,string)"

脚本获取并显示请求密码但超时的行。 我尝试使用“密码:”,“密码:”,“密码:\ r”和密码:*“但似乎没有匹配。


第二个问题是expect_out变量无法识别,我运行脚本时遇到以下错误(其名称为'this'且只有11行!):

  

无法读取“expect_out(0,string)”:没有这样的变量       执行时   “发送”$ expect_out(0,string)“”       (档案“this”第18行)

1 个答案:

答案 0 :(得分:5)

调试期望程序时要做的第一件事就是在顶部附近添加这一行:

exp_internal 1

打开(详细)调试输出,显示从生成的程序中看到的内容,以及它与预期模式的匹配程度。

通常,人们会这样做:

expect -re {password: $}
send -- "the_password\r"

您需要发送\r(回车)而不是\n