我有下面的预期脚本
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。
答案 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
这更容易合作!