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

时间:2015-12-25 23:35:02

标签: grep tcl

我在tclsh

下执行以下命令
exec sh -c "grep -w $string $file"

当$ string中的$ string不匹配时,我收到以下错误: 子过程异常退出

如何避免这种错误

2 个答案:

答案 0 :(得分:0)

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

你应该测试grep命令的返回或者添加' -q'参数,如果你想避免该消息:

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

答案 1 :(得分:0)

当子进程以非零退出代码退出时,exec会生成错误。当您处理诸如grep之类的命令时,如果根本找不到任何东西,也会生成非零代码。

Tcl 8.6 exec manual page

中列出了处理此问题的最简单方法
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的管道时,您可能会收到相同的错误。这是相同的机制。