【问题标题】:Expect is not recognizing $expect_out(buffer) or $expect_out(0,string)Expect 无法识别 $expect_out(buffer) 或 $expect_out(0,string)
【发布时间】:2013-07-03 16:59:25
【问题描述】:

我有 Ubuntu 9.10(由于测试,近期无法更改)和 expect5.45。 期望正在工作,但我(至少)有两个问题。 首先是期望似乎与字符串“密码:”不匹配。 在我的机器上,手动交互显示如下:

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 行)

【问题讨论】:

    标签: ubuntu ssh expect


    【解决方案1】:

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

    exp_internal 1
    

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

    通常,一个人会做这样的事情:

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

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

    【讨论】:

    • 谢谢格伦。神奇的是,expect_out() 正在工作,根据你的建议,我得到了匹配。谢谢您的帮助! (顺便说一句,我确实有 Don Libes 的“Exploring Expect”,但我现在才进入第 4 章。我需要查找发送的 -- 选项 ..
    • @Mike,干得好“这本书”。 “--”选项用于明确表示命令选项的结束,以防您要发送的字符串以连字符开头。这是一个好习惯,如果您正在处理用户输入和send -- $user_input\r
    • 谢谢,@glennjackman!这是你们指的书吗:shop.oreilly.com/product/9781565920903.do
    • 此答案不回答第二个(部分)问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-14
    • 1970-01-01
    • 2013-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多