我有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:~#
Run Code Online (Sandbox Code Playgroud)
脚本的内容如下:
Run Code Online (Sandbox Code Playgroud)#!/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)":执行"send"时没有这样的变量$ expect_out(0,string)""(文件"this"第18行)
调试expect程序时要做的第一件事就是在顶部附近添加这一行:
exp_internal 1
Run Code Online (Sandbox Code Playgroud)
这会打开(详细)调试输出,显示从生成的程序中看到的内容,以及它与预期模式的匹配程度.
通常,一个人做这样的事情:
expect -re {password: $}
send -- "the_password\r"
Run Code Online (Sandbox Code Playgroud)
您需要发送\r(回车)而不是\n.
| 归档时间: |
|
| 查看次数: |
5292 次 |
| 最近记录: |