stderrをパイプで処理する

いくつかのページが正常にブラウズできるかどうかをチェック。zabbixで設定してもいいのですが、暫定的な処理なのでちょろっとスクリプトを書いてすませることにしました。

チェック対象URIをリストにしてforでまわしてwget。戻り値が0なら200(または300)番台ってことでOKなのですが、一部だけ403(authentication error)でもOKってなところがある。
wgetに--server-responseをつけて、HTTPレスポンスコードをチェックすることにしました。ところがwgetがいろいろ情報を出力する先ってのがstderrなんですね。stdoutにはwgetでとってきた結果がでてくる。当然といえば当然か。
 

wget --server-response --output-document=/dev/null http://www.exapmle.com

ってなことをやると、こういう結果がstderrにでてきます。

--2014-06-24 09:21:43--  http://www.example.com/
www.example.com (www.example.com) をDNSに問いあわせています... 172.16.1.1
www.example.com (www.example.com)|172.16.1.1|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 
  HTTP/1.1 200 OK
  Date: Tue, 24 Jun 2014 00:13:56 GMT
  Server: Zope/(Zope 2.10.13-final, python 2.4.5, linux2) ZServer/1.1 Plone/3.1.7
  X-Frame-Options: SAMEORIGIN
  Content-Type: text/html; charset=utf-8
  Age: 534
  X-Cache: HIT from www.exmple.com
  Via: 1.1 www.example.com (squid/3.4.5)
  Via: 1.1 www.example.com
  Vary: Accept-Encoding
  Content-Length: 13604
  Keep-Alive: timeout=15
  Connection: Keep-Alive
長さ: 13604 (13K) [text/html]
`/dev/null' に保存中

100%[=====================================>] 13,604      --.-K/s   時間 0.03s 

2014-06-24 09:21:43 (414 KB/s) - `/dev/null' へ保存完了 [13604/13604]

このうち、HTTPレスポンスコードだけが欲しい。
なのでstderrを/dev/stdoutへリダイレクトした上でgrep,awkへパイプ。
こうやりました。

$ wget --server-response --output-document=/dev/null http://www.exmple.com 2> /dev/stdout  | grep 'HTTP/' | awk '{print $2}'
200