免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: ouyangting_2000
打印 上一主题 下一主题

求助 expect: 如何使用expect执行自定义的脚本 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2012-05-09 15:48 |只看该作者
本帖最后由 ouyangting_2000 于 2012-05-10 00:22 编辑

尝试在java启动的语句前加上了nohup,发现进程被神奇的启动了,但是expect脚本却报了一个超时的错误。
[root@newtest-tomcat1 bin]# /opt/script/ScriptJava/test.exp start-cps-atm.sh
expect version 5.42.1
argv[0] = /usr/bin/expect  argv[1] = -d  argv[2] = /opt/script/ScriptJava/test.exp  argv[3] = start-cps-atm.sh  
set argc 1
set argv0 "/opt/script/ScriptJava/test.exp"
set argv "start-cps-atm.sh"
executing commands from command file /opt/script/ScriptJava/test.exp
spawn ./start-cps-atm.sh
parent: waiting for sync byte
parent: telling child to go ahead
parent: now unsynchronized from child
spawn: returns {10898}

expect: does "" (spawn_id exp4) match glob pattern "*Please select:*"? no
Enviroments:
[0]: stage00
[1]: stage01
[2]: stage02
[3]: production

expect: does "Enviroments:\r\n[0]: stage00\r\n[1]: stage01\r\n[2]: stage02\r\n[3]: production\r\n" (spawn_id exp4) match glob pattern "*Please select:*"? no
Please select:
expect: does "Enviroments:\r\n[0]: stage00\r\n[1]: stage01\r\n[2]: stage02\r\n[3]: production\r\nPlease select: " (spawn_id exp4) match glob pattern "*Please select:*"? yes
expect: set expect_out(0,string) "Enviroments:\r\n[0]: stage00\r\n[1]: stage01\r\n[2]: stage02\r\n[3]: production\r\nPlease select: "
expect: set expect_out(spawn_id) "exp4"
expect: set expect_out(buffer) "Enviroments:\r\n[0]: stage00\r\n[1]: stage01\r\n[2]: stage02\r\n[3]: production\r\nPlease select: "
send: sending "2\r" to { exp4 }

expect: does "" (spawn_id exp4) match glob pattern "EOF"? no
2

expect: does "2\r\n" (spawn_id exp4) match glob pattern "EOF"? no
env is stage02

expect: does "2\r\nenv is stage02\r\n" (spawn_id exp4) match glob pattern "EOF"? no
cp succesful

expect: does "2\r\nenv is stage02\r\ncp succesful\r\n" (spawn_id exp4) match glob pattern "EOF"? no
expect: timed out
[root@newtest-tomcat1 bin]#

论坛徽章:
0
12 [报告]
发表于 2012-05-10 10:42 |只看该作者
想问一下waker大大,我的shell启动脚本在最后一句应该结束了,为什么会有timeout这样的错误?

论坛徽章:
0
13 [报告]
发表于 2012-05-10 10:50 |只看该作者
expect: does "" (spawn_id exp4) match glob pattern "EOF"? no
看输出日志,应该是在等EOF,一直没等到才报的timeout,我感觉不影响结果,请高手定夺

论坛徽章:
0
14 [报告]
发表于 2012-05-10 12:02 |只看该作者
roger_3301 发表于 2012-05-10 10:50
expect: does "" (spawn_id exp4) match glob pattern "EOF"? no
看输出日志,应该是在等EOF,一直没等到才 ...


结果的确不影响,应用也启动起来了,但是timeout的结果总让我想不通。

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
15 [报告]
发表于 2012-05-10 12:37 |只看该作者
请对比一下
eof
EOF

论坛徽章:
0
16 [报告]
发表于 2012-05-10 17:02 |只看该作者
waker 发表于 2012-05-10 12:37
请对比一下
eof
EOF

谢谢提点,我改成了小写的eof,但是仍然报超时,我能不能理解为我执行的shell脚本并没有文件结束符,所以expect脚本一直等待到超时?

论坛徽章:
0
17 [报告]
发表于 2012-05-11 09:49 |只看该作者
我试了一下,在expect eof之前,先退出spawn启动的脚本,就能正确read eof了。
所以,在expect eof之前,可以加以下两句:
expect "*"
send "exit\r"
这样就不会出现timed out了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP