23

我使用 expect 来运行测试脚本。测试通过退出代码返回成功/失败。但期望返回等效的退出代码。如何使期望返回正确的退出状态?

我的测试是使用psql(postgresql 命令处理器)运行的 sql 脚本。由于 psql 不允许将数据库密码指定为命令行参数,因此期望脚本会这样做。

所以,我的期望脚本看起来像:

spawn $SPAWN_CMD
expect {
        -re "Enter password for new role:" {
                send "$PWPROMPT\n"
                exp_continue
        } -re "Enter it again:" {
                send "$PWPROMPT\n"
                exp_continue
        } -re "Password(.*)" {
                send "$PASSWORD\n"
                exp_continue
        } -re "Password(.*):" {
                send "$PASSWORD\n"
                exp_continue
        } eof
}
4

1 回答 1

34

您已经在等待eof循环结束时,您只需要使用waitcatch结果:

spawn true
expect eof
catch wait result
exit [lindex $result 3]

以 0 退出。

spawn false
expect eof
catch wait result
exit [lindex $result 3]

以 1 退出。

于 2010-07-21T14:25:40.440 回答