如何绕过“儿童过程异常退出”

时间:2017-08-23 01:52:21

标签: shell tcl

我试图将以下两行作为Tcl脚本执行。 由于keyword1有时在file1中不存在,grep返回状态代码1,exec将其视为错误并停止执行第二行。无论是否有匹配,我如何强制它运行两条线。

exec grep keyword_1 file_1 > report_1
exec grep keyword_2 file_2 > report_2

2 个答案:

答案 0 :(得分:3)

您可以使用catch命令捕获异常。

if {[catch {exec grep keyword_1 file_1 > report_1} result]} {
    puts "problem in executing grep on file1"
    puts "Reason : $result"
}
if {[catch {exec grep keyword_2 file_2 > report_2} result]} {
    puts "problem in executing grep on file2"
    puts "Reason : $result"
}

如果您不关心正在执行的命令的状态或错误消息,那么它可以简单地写为,

catch {exec grep keyword_1 file_1 > report_1}
catch {exec grep keyword_2 file_2 > report_2}

参考: catch

答案 1 :(得分:1)

您可以忽略grep的退出状态:

exec sh -c {grep keyword_1 file_1 > report_1; true}
exec sh -c {grep keyword_2 file_2 > report_2; true}

但是,最好使用catch作为@Dinesh建议

如果您有现代Tcl

,请使用try
try {exec grep keyword_1 file_1 > report_1} trap CHILDSTATUS {} {}
try {exec grep keyword_2 file_2 > report_2} trap CHILDSTATUS {} {}