我在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
的管道,则可能会得到相同的错误。这是相同的机制