免费注册 查看新帖 |

Chinaunix

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

expect如何取到执行的命令返回值? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-09-04 15:30 |只看该作者 |倒序浏览
expect如何取到执行的命令返回值?
比如
send "sh /tmp/DealWith_Binlog_Remote.sh\r"
我要取到sh /tmp/DealWith_Binlog_Remote.sh的执行状态
不知道怎么实现?

论坛徽章:
0
2 [报告]
发表于 2006-09-04 16:16 |只看该作者
宁外如何区分expect的变量和shell的变量?

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
3 [报告]
发表于 2006-09-04 18:41 |只看该作者
变通方法,加入命令打印返回值:
send "sh /tmp/DealWith_Binlog_Remote.sh;echo RSTATUS?\r"
仅供参考。^_^

论坛徽章:
0
4 [报告]
发表于 2006-09-05 09:03 |只看该作者
楼上的那样是不行的哦,因为你得到的返回值是取不到的,
echo RSTATUS?\r
执行完后是
admin@aa$:
expect还是取不到的哦
只能有一种变通的方法,但是还是想知道expect本身有没有能保留所执行的命令的返回值

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
5 [报告]
发表于 2006-09-05 09:21 |只看该作者
你的测试有问题吧?
看我的测试:
  1. $ expect -c 'spawn sh;send "echo;echo RSTATUS:$?\r";interact '
  2. spawn sh
  3. echo;echo RSTATUS:$?
  4. sh-3.00$ echo;echo RSTATUS:$?

  5. RSTATUS:0
复制代码

字符串RSTATUS:后面输出了返回值0。

论坛徽章:
0
6 [报告]
发表于 2006-09-05 10:03 |只看该作者
楼上的没理解我的意思
不是说不能输出$?,是不能得到$?
比如
a.sh里面有个a.exp,a.exp里面需要执行b.sh命令
我在a.sh只能得到a.exp的返回结果,不能得到b.sh的返回结果,除非expect能将b.sh的返回值返回给a.sh
用临时文件就没什么意义了,其他变通方法也行,就是向问问有没有这样只能能获得b.sh的返回值的命令或者函数?

[ 本帖最后由 talen-t 于 2006-9-5 10:06 编辑 ]

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
7 [报告]
发表于 2006-09-05 12:11 |只看该作者
原帖由 talen-t 于 2006-9-5 10:03 发表
楼上的没理解我的意思
不是说不能输出$?,是不能得到$?
比如
a.sh里面有个a.exp,a.exp里面需要执行b.sh命令
我在a.sh只能得到a.exp的返回结果,不能得到b.sh的返回结果,除非expect能将b.sh的返回值返回给a.sh
...

既然能输出,自然就有办法得到,并且能够返回给父shell。^_^

  1. $ expect -c 'spawn sh
  2. send "ls;echo RSTATUS:$?\r"
  3. expect -re "RSTATUS:(\[0-9\]+)" {exit $expect_out(1,string)}'
  4. [n行输出略...]
  5. $ echo $?
  6. 0

  7. $ expect -c 'spawn sh
  8. send "ls no-such-file;echo RSTATUS:$?\r"
  9. expect -re "RSTATUS:(\[0-9\]+)" {exit $expect_out(1,string)}'
  10. [n行输出略...]
  11. $ echo $?
  12. 1
复制代码

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
8 [报告]
发表于 2006-09-05 13:54 |只看该作者
原帖由 talen-t 于 2006-9-5 10:03 发表
楼上的没理解我的意思
不是说不能输出$?,是不能得到$?
比如
a.sh里面有个a.exp,a.exp里面需要执行b.sh命令
我在a.sh只能得到a.exp的返回结果,不能得到b.sh的返回结果,除非expect能将b.sh的返回值返回给a.sh
...

既然能输出,自然就有办法得到,并且能够返回给父shell。^_^

  1. $ expect -c 'spawn sh
  2. send "ls;echo RSTATUS:$?\r"
  3. expect -re "RSTATUS:(\[0-9\]+)" {exit $expect_out(1,string)}'
  4. [n行输出略...]
  5. $ echo $?
  6. 0

  7. $ expect -c 'spawn sh
  8. send "ls no-such-file;echo RSTATUS:$?\r"
  9. expect -re "RSTATUS:(\[0-9\]+)" {exit $expect_out(1,string)}'
  10. [n行输出略...]
  11. $ echo $?
  12. 1
复制代码

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
9 [报告]
发表于 2006-09-05 17:03 |只看该作者
晕倒!CU的论坛程序真牛啊!提交的回复本来以为已经失败了,重新提交了一次,谁知道一个多小时以后竟然还是提交成功了!彻底晕菜!;-P

论坛徽章:
0
10 [报告]
发表于 2006-09-05 17:18 |只看该作者
楼上高人,不过
麻烦解释一下,没看懂,呵呵!
是不是关键在$expect_out(1,string)这里?
expect -c 'spawn sh
和expect -re 也不太明白

顺便写写偶的办法,很笨的

send "ls aa"
expect "admin@"
send "echo -n $?"
expect {
"0admin@"  {exit 0}
"*admin@"  {exit 1}
}

[ 本帖最后由 talen-t 于 2006-9-5 17:23 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP