我正在写一个期望脚本来做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'输出正确的返回代码。
有人可以帮我解决这个问题吗?感谢您的帮助。 如果您需要更多信息,请与我们联系。
答案 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
中不太可能发生的事情但是这种事情一般是你在远程工作时的方式:你必须告诉对方告诉你发生了什么。