我试图将以下两行作为Tcl脚本执行。 由于keyword1有时在file1中不存在,grep返回状态代码1,exec将其视为错误并停止执行第二行。无论是否有匹配,我如何强制它运行两条线。
exec grep keyword_1 file_1 > report_1
exec grep keyword_2 file_2 > report_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 {} {}