在Tcl中,什么是bash中的“set -e”等价物?

时间:2013-05-25 07:44:34

标签: tcl

是否有一种方便的方法在Tcl脚本中指定在发生任何错误时立即退出?什么类似于bash中的set -e

编辑我正在使用一种实现Tcl作为其脚本语言的软件。例如,如果我运行包parseSomeFile fname,如果文件fname不存在,它会报告它,但脚本继续执行。有没有办法让我在那里停止剧本?

2 个答案:

答案 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之前检查文件是否存在。