【问题标题】:need to return exit code of spawned procees from expect script需要从期望脚本返回生成过程的退出代码
【发布时间】:2011-08-13 23:39:42
【问题描述】:

我有下面的期望脚本

expect -c "
spawn tdwallet add $StringName
expect \"^Enter\"
send \"Krishna123\r\"
"

if [ $? != 0 ]; then
   echo "Failed to Add a String $StringName."
else
   echo "\"add <string>\" ==> [OK]"
fi

我尝试修改期望脚本,即在“发送”之后添加一些行

expect -c "
spawn tdwallet add $StringName
expect \"^Enter\"
send \"Krishna123\r\"
expect eof
catch wait reason
exit [lindex $reason 3]
"

但无论进程的失败/成功如何,它总是返回一个非零值。

当进程失败/成功时,您能否给我一些指示以识别正确的退出代码。

提前致谢

问候,
斯里克里希纳·埃拉。

【问题讨论】:

    标签: shell tcl expect


    【解决方案1】:

    问题是$reason 被您的shell 取代(而不是期望)。此外,它可能被替换为空字符串,这会导致语法错误。解决此问题的最快方法是在 $ 前面添加一个反斜杠,如下所示:

    expect -c "
    spawn tdwallet add $StringName
    expect \"^Enter\"
    send \"Krishna123\r\"
    expect eof
    catch wait reason
    exit [lindex \$reason 3]
    "
    

    OTOH,既然您已经达到了这种复杂程度,最好将该脚本放在一个单独的文件中,这样您就可以减少反斜杠的数量。此时,您将切换到将要添加的内容作为命令行参数传递。

    因此,在 addWallet.exp 你有这个:

    spawn tdwallet add [lindex $argv 0]
    expect "^Enter"
    send "Krishna123\r"
    expect eof
    catch wait reason
    exit [lindex $reason 3]
    

    然后你的主要脚本是这样的:

    expect addWallet.exp $StringName
    

    这更容易使用!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-30
      • 1970-01-01
      • 1970-01-01
      • 2011-11-26
      • 1970-01-01
      • 2015-06-16
      相关资源
      最近更新 更多