在 expect 脚本上捕获 make 的错误
catch error of make on an expect script
我正在编写一个 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,即使出现真正的故障也是如此。
如我所见,尽管 'make' 需要几分钟才能完成,但 set 命令被执行并且 BLD_PASS 立即获取值。所以,它看起来并没有真正得到 make 的输出。
我已经通过在 bash 脚本中使用它来验证 'make' 输出正确的 return 代码。
谁能帮我解决这个问题?感谢你的帮助。
如果您需要更多信息,请告诉我。
您的代码不起作用的原因是 send
本身成功了:它将消息发送到另一端。它只是还没有得到结果。最简单的方法可能是让对方报告退出状态,然后监听。
send "make buildXYZ; echo FROGBARGLE_$?_BARGLEFROG\r"
expect {
-re {FROGBARGLE_([^\s_]+)_BARGLEFROG} {
puts "exit code was $expect_out(1,string)"
}
}
有更奇特的方法来跟踪这类事情(而且 FROGBARGLE_…_BARGLEFROG
可能有点 太 任意;我选择它是不太可能发生的事情make
输出)但是这种事情通常是你在远程工作时的方式:你必须告诉对方告诉你发生了什么。
我正在编写一个 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,即使出现真正的故障也是如此。 如我所见,尽管 'make' 需要几分钟才能完成,但 set 命令被执行并且 BLD_PASS 立即获取值。所以,它看起来并没有真正得到 make 的输出。
我已经通过在 bash 脚本中使用它来验证 'make' 输出正确的 return 代码。
谁能帮我解决这个问题?感谢你的帮助。 如果您需要更多信息,请告诉我。
您的代码不起作用的原因是 send
本身成功了:它将消息发送到另一端。它只是还没有得到结果。最简单的方法可能是让对方报告退出状态,然后监听。
send "make buildXYZ; echo FROGBARGLE_$?_BARGLEFROG\r"
expect {
-re {FROGBARGLE_([^\s_]+)_BARGLEFROG} {
puts "exit code was $expect_out(1,string)"
}
}
有更奇特的方法来跟踪这类事情(而且 FROGBARGLE_…_BARGLEFROG
可能有点 太 任意;我选择它是不太可能发生的事情make
输出)但是这种事情通常是你在远程工作时的方式:你必须告诉对方告诉你发生了什么。