关于expect脚本交互的一些问题

sh/bash/dash/ksh/zsh等Shell脚本
回复
formylove2
帖子: 105
注册时间: 2008-11-03 10:06

关于expect脚本交互的一些问题

#1

帖子 formylove2 » 2010-02-03 17:30

工作需要

用expect脚本 telnet 上了一个设备

现在问题是 我send一个命令后 设备会反馈到终端上显示出一些信息 其中包含IP 而且这个IP是不固定的

于是我想 在expect 脚本里将 这些反馈信息 预存到一个文本里 然后再用bash脚本正则出IP 然后赋值给一个变量

然后再在expect 脚本调用这个变量

怎么操作? 有其他解决方案没?
我现在就是不知道如何获取反馈信息 且将它们存到文本里

各位达达说下关键词
头像
charleskao
帖子: 206
注册时间: 2008-03-27 17:21

Re: 关于expect脚本交互的一些问题

#2

帖子 charleskao » 2010-02-03 17:49

grep
formylove2
帖子: 105
注册时间: 2008-11-03 10:06

Re: 关于expect脚本交互的一些问题

#3

帖子 formylove2 » 2010-02-04 8:55

expect 里只能用spawn 调用

怎么个写法 能让expect 获取的终端数据 保存到文本里?
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 关于expect脚本交互的一些问题

#4

帖子 eexpress » 2010-02-04 14:10

那你还不如,命令后面,直接 1>xxxx
● 鸣学
little_gg
帖子: 32
注册时间: 2008-01-29 9:09

Re: 关于expect脚本交互的一些问题

#5

帖子 little_gg » 2010-02-04 16:20

log_file -a logfile
记录操作过程中的所有动作

你是要这样的麽?
formylove2
帖子: 105
注册时间: 2008-11-03 10:06

Re: 关于expect脚本交互的一些问题

#6

帖子 formylove2 » 2010-02-04 16:23

ee的意思?
expect * >>XXXXX

??
cosechy
帖子: 82
注册时间: 2008-03-06 4:56

Re: 关于expect脚本交互的一些问题

#7

帖子 cosechy » 2010-02-06 18:48

expect本身就支持正则表达式,而且应该比bash方便多了

expect -indices -re {正则表达式}
然后用$expect_out(n,string)表示第n个括号里的字符串,整个字符串是0
有的时候可能要在正则表达式前面加上^以保证是从缓冲区开头开始匹配,最前面还要加上一条命令match_max 接一个大数以免缓冲区满

当然你要是非得把$expect_out(0,string)写进文件然后再读一遍我也没办法
tcl保存文件:
set 变量 [open 文件名 w]
puts -nonewline $变量 内容
close $变量
运行命令并读取结果:
set 变量 [open {|命令} r]
随便你怎么处理 [read $变量]
close $变量
运行命令并通过expect分析结果:
spawn -open [open {|命令} r]
需要备份一个什么变量或者封装在单独函数里,具体就看文档吧

用log_file记录理论上当然也不是不行,不过那样你还不如用纯bash脚本:
命令|tee 文件|{ grep xxx;你的处理;}
想要交互的话:
exec 3<> >(:)
命令 0<&3 |tee 文件|{ grep xxx;你的处理 >&3;}
不过<> >(:)是文档里没有的非常规用法,而且想要关闭文件也稍微有点麻烦(但是可行)。。你也可以mkfifo,这样比较正规
formylove2
帖子: 105
注册时间: 2008-11-03 10:06

Re: 关于expect脚本交互的一些问题

#8

帖子 formylove2 » 2010-02-08 12:05

7楼解决我的问题了 !!

本来可以man 着慢慢看的 但E文有限 又急着用

谢谢7楼!

另外 装进文本是为方便调试 后来 发现 可以直接 send "echo XXX"

再次感谢cosechy!!
cosechy
帖子: 82
注册时间: 2008-03-06 4:56

Re: 关于expect脚本交互的一些问题

#9

帖子 cosechy » 2010-02-10 10:22

我只是路过的,看着地方严重不爽
于是随便说几句话。
回复