tcl:使用选项w执行grep时出错



我在tclsh 下执行以下命令

exec sh -c "grep -w $string $file"

当$文件中的$字符串不匹配时,我得到以下错误:子进程异常退出

如何避免这个错误

如果找不到模式,grep将返回1,exec将其解释为错误,并向您显示上面的消息。

如果您想避免出现以下消息,您应该测试grep命令的返回,或者添加"-q"参数:

http://www.gnu.org/software/grep/manual/html_node/Exit-Status.html

当子流程退出时带有非零退出代码时,exec会生成一个错误。当您处理像grep这样的命令时,当根本找不到东西时,也会生成非零代码。

Tcl 8.6 exec手册页面中列出了处理此问题的最简单方法:

try {
    set results [exec grep foo bar.txt]
    set status 0
} trap CHILDSTATUS {results options} {
    set status [lindex [dict get $options -errorcode] 2]
}

(手册页还描述了如何处理早期版本中的问题。代码要丑陋得多。)

请注意,如果close是一个包含失败grep的管道,则可能会得到相同的错误。这是相同的机制

最新更新