bashでコマンドの実行結果を取得するには、$?を使います。
たとえば次のようなログファイルが3つあるとします。「ERROR AAAA」を含むログだけ検出するためにはどうすれば良いでしょう。
$ cat log1.txt ERROR AAAA ERROR BBBB $ cat log2.txt ERROR CCCC ERROR BBBB $ cat log3.txt AAA BBB CCC
次のようなgrep-pipeline.shを用意します。grepコマンドをパイプラインでつなげて実行しています。$?をresult変数へ代入して、echoでresultの値を表示することにより、このコマンドの結果がどうなったかをわかるようにしています。
$ cat grep-pipeline.sh #!/bin/sh grep "ERROR" $1 | grep "AAAA" result=$? echo $result;
各ログファイルのうちヒットするのは、log1.txtだけのはずです。$?の結果がどのようになるかを見てみましょう。
$ for i in 1 2 3; do echo "$i----"; ./grep-pipeline.sh log${i}.txt; done 1---- ERROR AAAA 0 2---- 1 3---- 1
確かに、「ERROR AAAA」を含むログファイルだけ$?の値が0となって判別がつくことがわかります。