2011-04-27 84 views
2

我有以下期待脚本需要从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脚本,即增加了一些行之后“送”

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

但它是返回催生procees的退出代码无论过程失败/成功,总是返回一个非零值。

当你的程序失败/成功时,你能给我一些指出正确退出代码的指针吗?

在此先感谢

问候,
Srikrishna地震署。

回答

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 

这是更容易与合作!