如何在Expect脚本中返回生成的进程退出代码?

时间:2010-07-21 13:05:02

标签: linux shell scripting expect

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

我的测试是使用 psql (postgresql命令处理器)运行的sql脚本。 由于psql不允许将数据库密码指定为命令行参数,因此 expect scripts 可以执行此操作。

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

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
}

1 个答案:

答案 0 :(得分:28)

您已经在循环结束时等待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退出。