免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2450 | 回复: 5
打印 上一主题 下一主题

如何在shell里运行一个交互式的二进制,为其提供自动输入并获取返回结果? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-09-05 18:15 |只看该作者 |倒序浏览
简单的说是这样的,一个二进制文件是交互式的运行,如下所示:

#./bbb
> command                      <-----input run command
> exit                               <-----exit the program

如果输入错误程序会提示信息,如果成功也会返回一些信息。

我想问的是,如果在脚本里控制运行?我把要输入的命令传递给它,并能把它返回信息写到一个文本里?

请高手指教,谢谢。

论坛徽章:
0
2 [报告]
发表于 2007-09-05 18:49 |只看该作者
Here document ?

论坛徽章:
0
3 [报告]
发表于 2007-09-05 21:37 |只看该作者
时间紧迫,大家帮忙下,谢谢啦

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
4 [报告]
发表于 2007-09-05 22:51 |只看该作者
2楼说的应该可以

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
5 [报告]
发表于 2007-09-05 23:00 |只看该作者
不很清楚 LZ 的要求。
不知道是否要 expect 命令呢?

论坛徽章:
0
6 [报告]
发表于 2007-09-05 23:25 |只看该作者
我把程序贴出来,确实需要expect,而且还需要获取返回值。
我先手动运行一下程序,它的交互式如下

#eaw ip
>hgsdp:msisdn=$a,$b;   -->这里是手动输入,a和b是变量
>id=245                        --->这里是从远端IP返回的值
>exit                             --->手动输入后,退出程序

这时,我获得了id=245
然后我再次运行
#eaw ip
>hgsdp:msisdn=$a,$b;245; --->这里的245是我刚才获取到的值
>exit

下面是临时解决方法,在expect里能获取到对端返回的值吗?并作为一个变量来处理

#!/bin/sh
PARANUM=/home/eric/wlj/parnum
ESNU=/home/eric/wlj/esnum
for j in `cat $ESNU`
do
for i in `cat $PARANUM`
do
/ericsson/dmr/bin/expect <<eof
set timeout 5
set send_human {.1 .3 1 .05 1}
spawn eaw %j
expect "<"
send "hgsdp:msisdn=$i,all;\r"
expect "<"
interact
expect eof
eof
done
done
rm /home/eric/wlj/paranum

[ 本帖最后由 bobkey 于 2007-9-5 23:26 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP