如何获得expect中spawn的命令的返回值?

expect脚本

我们写一个名为test.sh的小脚本,程序的源码如下:

#!/bin/bash

expect_test()
{
        read -p "please input data:" data
        if [ "${data}x" = "x" ];then
                echo "Warning:no data"
                ret=1
        else
                echo "the Date is:${data}"
                ret=0
        fi

        return $ret
}

expect_test

我们写一个expect脚本:

#!/usr/bin/expect
spawn sh test.sh
expect "please input data:"
send "Just for test\n"
expect eof
catch wait result
exit [lindex $result 3]

解释:
第6行:catch wait result
解释:将wait命令的返回值存储到result变量中. result变量并不是一个特殊变量, 你可以随意换一个新名字(比如retVal).
备注:wait命令的返回值是一个"%d %s 0 %d"格式的字符串,第0个值是pid,第1个是spawn_id(不知道它具体带表了什么),第2个应当是代表脚本是否正常完成,第3个是子进程的返回值.
第7行:exit [lindex $result 3]
将result变量(这个变量存储的是一个列表)list中的index=3的那个值取出来,返回它。你可以搜索"Tcl 列表 lindex"以查看详细信息。
脚本运行结果:
在这里插入图片描述

怎么在一个shell脚本中嵌进去expect的调用?

例:

#!/bin/bash
expect_test()
{
        DATA="$1"
        echo "variable is ${DATA}"
        echo "will call expect1."
        expect -c '      #注意这里要使用单引号,双引号效果不一样
spawn sh test.sh
expect "please input data:"
send '${DATA}'\n
expect eof
catch wait result
exit [lindex $result 3]
'
        echo $?
        echo "call expect1 finish."
        echo ">>>>>>>>>>>>>>>>>>>>"
}

expect_test 120
expect_test

执行结果:
在这里插入图片描述

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值