Tcl 捕获expect脚本上的make错误
我正在编写一个expect脚本来进行编译。这是一个多步骤脚本,我尝试捕捉错误并停止脚本(如果有)。 以下是一个示例:Tcl 捕获expect脚本上的make错误,tcl,expect,Tcl,Expect,我正在编写一个expect脚本来进行编译。这是一个多步骤脚本,我尝试捕捉错误并停止脚本(如果有)。 以下是一个示例: 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 { sen
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_过程立即获得值,尽管“make”需要几分钟才能完成。所以,它看起来并不是真的得到make的输出
我已经通过在bash脚本中使用“make”验证了它是否输出了正确的返回代码
谁能帮我解决这个问题?谢谢你的帮助。
如果您需要更多信息,请告诉我。您的代码不起作用的原因是发送本身成功:它将消息发送到了另一端。只是还没有得到结果。要做到这一点,最简单的方法可能是让对方报告退出状态,然后倾听
send "make buildXYZ; echo FROGBARGLE_\$?_BARGLEFROG\r"
expect {
-re {FROGBARGLE_([^\s_]+)_BARGLEFROG} {
puts "exit code was $expect_out(1,string)"
}
}
有更奇特的方法来追踪这类事情,而FROGBARGLE_…\u BARGLEFROG可能有点太武断了;我认为这在make output中不太可能发生,但这种事情通常是远程工作时的方式:您必须告诉对方发生了什么。您无法从类似的远程命令中获取退出状态。你必须做一些痛苦的事情,比如发送echo\$?\r并解析输出。一个更好的策略是寻找错误消息,或者寻找错误消息的缺失。