一尘不染

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

linux

我使用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
}

阅读 548

收藏
2020-06-07

共1个答案

一尘不染

您已经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.退出。

2020-06-07