是否有一种方便的方法在Tcl脚本中指定在发生任何错误时立即退出?什么类似于bash中的set -e
?
编辑我正在使用一种实现Tcl作为其脚本语言的软件。例如,如果我运行包parseSomeFile fname
,如果文件fname
不存在,它会报告它,但脚本继续执行。有没有办法让我在那里停止剧本?
答案 0 :(得分:1)
通常不需要;一个命令失败,抛出一个错误,如果没有捕获,脚本会以信息性消息退出(好吧,这取决于主机程序:那是tclsh
的行为)。尽管如此,如果您需要立即 退出,您可以通过在收集错误跟踪的全局变量上添加跟踪来快速处理:
trace add variable ::errorInfo write {puts stderr $::errorInfo;exit 1;list}
(最后的list
只是捕获跟踪参数,以便忽略它们。)
执行此操作不。现有的Tcl代码(包括您可能正在使用的所有软件包)假定它可能catch
错误并执行某些操作它们。
答案 1 :(得分:0)
在Tcl中,如果遇到错误,脚本将立即退出,除非你抓住它。这意味着您无需指定set -e
。
理想情况下,parseSomeFile
应该返回错误,但看起来却没有。如果您可以控制它,请修复它以返回错误:
proc parseSomeFile {filename} {
if {![file exists $filename]} {
return -code error "ERROR: $filename does not exists"
}
# Do the parsing
return 1
}
# Demo 1: parse existing file
parseSomeFile foo
# Demo 2: parse non-existing file
parseSomeFile bar
第二个选项是在调用parseSomeFile
之前检查文件是否存在。