2017-08-23 1 views
0

私はTclスクリプトとして次の2行を実行しようとしていました。 キーワード1がfile1に存在しないことがあるため、grepはステータスコード1を返します。execはエラーとして処理し、2行目の実行を停止します。一致するかどうかにかかわらず、どのようにして両方の行を強制的に実行させるか。"子プロセスが異常終了しました"をバイパスする方法

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

http://wiki.tcl.tk/execを参照してください "までスクロールダウンしている場合@Dineshは

を示唆するようcatchを使用するか、またはtryを使用する方「子の状態」セクションを参照してください。本質的に、 'exec'は非ゼロの終了ステータスをエラーとして処理し、' grep'はパターンが見つからないときに「1」を返します。 –

+0

ありがとう、はい私はその記事を読んだが、このエラーコードを無視するためにキャッチをどのように使用するのかわかりません。 – Bryan

答えて

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

また、検索がTclで直接行われる方がよいかどうかを検討してください。野生のgrepの多くの使用は純粋な過剰なものです。 –

+0

@Dinesh Catch {...}はうまくいきました。どうもありがとうございます。 – Bryan

1

あなたは可能性がありgrepの終了ステータスを次のように無視します。

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

しかし、おそらくあなたは、現代のTcl

try {exec grep keyword_1 file_1 > report_1} trap CHILDSTATUS {} {} 
try {exec grep keyword_2 file_2 > report_2} trap CHILDSTATUS {} {} 
関連する問題