捕获期望脚本上的make错误

时间:2015-11-17 21:21:14

标签: tcl expect

我正在写一个期望脚本来做make(编译)。这是一个多步骤脚本,我尝试捕获错误并停止脚本,如果有的话。 这是一个示例:

set BLD_PASS 1
set BLD_PASS [catch {exp_send "make buildXYZ\r"} output]
expect {
  folder] {
    if { $BLD_PASS == "0" } {
       send_user "Build passed on XYZ \n\n"
    } else {
        send_user "Build failed on XYZ\n\n"
        exit
    }
  }
}

问题是即使出现真正的故障,我总是将BLD_PASS设为0。 正如我所见,set命令被执行并且BLD_PASS立即获得值,尽管'make'需要几分钟才能完成。所以,它看起来并没有真正得到make的输出。

我已经通过在bash脚本中使用它来验证'make'输出正确的返回代码。

有人可以帮我解决这个问题吗?感谢您的帮助。 如果您需要更多信息,请与我们联系。

1 个答案:

答案 0 :(得分:2)

您的代码无法正常工作的原因是send本身正在成功:它将消息发送到另一端。它还没有得到结果。最简单的方法是让对方报告退出状态,然后再听取。

send "make buildXYZ; echo FROGBARGLE_\$?_BARGLEFROG\r"
expect {
    -re {FROGBARGLE_([^\s_]+)_BARGLEFROG} {
        puts "exit code was $expect_out(1,string)"
    }
}

有更好的方式来跟踪这类事情(FROGBARGLE_…_BARGLEFROG可能有点任意;我选择它是make中不太可能发生的事情但是这种事情一般是你在远程工作时的方式:你必须告诉对方告诉你发生了什么。