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

sea*_*eas 22 linux shell scripting expect

我使用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
}
Run Code Online (Sandbox Code Playgroud)

Dou*_*der 31

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

spawn true
expect eof
catch wait result
exit [lindex $result 3]
Run Code Online (Sandbox Code Playgroud)

退出0.

spawn false
expect eof
catch wait result
exit [lindex $result 3]
Run Code Online (Sandbox Code Playgroud)

退出1.

  • @ sasha.sochka如果你输入它就像$ result被shell解释而不是期望.将输入放在单引号中,或者转义$. (2认同)