需要从expect脚本返回生成进程的退出代码

时间:2011-04-27 15:39:09

标签: shell tcl expect

我有下面的预期脚本

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]
"

但无论过程失败/成功,它都会返回非零值。

在处理失败/成功时,您能否给我一些指示,以确定正确的退出代码。

提前致谢

的问候,
Srikrishna Erra。

1 个答案:

答案 0 :(得分:3)

问题是$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

这更容易合作!