2011-01-21 22 views
7

Makefileは次のとおりです。は、grepの出力が空である

THIS.txt : foo.txt 
     grep THIS foo.txt > [email protected] 

grepの出力が空の場合(なしでTHIS foo.txt)、makeはエラーメッセージを表示しますが、bashはそうではありません:

$ make 
make:*** [THIS.txt] Error 1 

$ grep THIS foo.txt > THIS.txt 

$ grep THIS foo.txt 2>&1 

どうしてですか? grepの出力が空の場合、エラーメッセージを避けるためにメイクファイルを変更する方法はありますか?

答えて

13

grepはbashでエラーを与えるものではありませんが、それはリターンゼロ以外の終了コードん:あなたはそのよう、そのゼロ以外の終了コードを取り除くために

> grep THIS foo.txt 2>&1 
> echo $? 
1 

をしたい場合makeはエラーとしてではないフラグそれを、あなたがこれを行うことができます。

THIS.txt : foo.txt 
    grep THIS foo.txt > [email protected] || true 

|| trueビットが0以外の終了コードがある場合は、常に01である代わりにtrueの終了コードを(返す」と言いますbashの)。

+0

+1、いいキャッチです。 – codaddict

+1

ありがとう!何か他の理由で非ゼロの終了コードからの空の出力による非ゼロの終了コードを簡単に区別する方法はありますか?したがって、体系的に真に強制することはできません。 – alxpublic

+0

空の出力は、自動的にゼロ以外の終了コードを意味するわけではありません。 'grep'がどのように動作するかだけに特有です。一致するものが見つからなければ、非ゼロの終了コードで終了します。 – Amber

関連する問題