Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Tcl中,什么是“Tcl”的等价物;集合-e";在bash?_Tcl - Fatal编程技术网

在Tcl中,什么是“Tcl”的等价物;集合-e";在bash?

在Tcl中,什么是“Tcl”的等价物;集合-e";在bash?,tcl,Tcl,有没有一种方便的方法可以在Tcl脚本中指定在发生错误时立即退出?在bash中是否有类似于set-e的set-e 编辑我使用的软件实现了Tcl作为脚本语言。例如,如果我运行包parseSomeFile fname,如果文件fname不存在,它将报告该文件,但脚本将继续执行。有没有办法让脚本停在那里 在Tcl中,如果您遇到错误,脚本将立即退出,除非您捕获它。这意味着您不需要指定类似的set-e 更新 理想情况下,parseSomeFile应该返回一个错误,但看起来没有。如果您可以控制它,请修复它以返

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


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

在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

之前检查文件是否存在,这通常是不需要的;命令失败的原因是抛出一个错误,如果没有捕获到该错误,脚本将退出并显示一条信息性消息(这取决于主机程序:这是
tclsh
的行为)。不过,如果您确实需要立即退出,可以在收集错误跟踪的全局变量上添加跟踪,以加快进度:

trace add variable ::errorInfo write {puts stderr $::errorInfo;exit 1;list}
(最后的
列表
只是捕获跟踪参数,以便忽略它们。)


不建议这样做。现有的Tcl代码,包括您可能正在使用的所有软件包,都假定它可以
捕获
错误并采取措施来处理它们。

谢谢。工作得很好。我不会经常使用它,但有时它很方便。