Tips記事
» 2003年08月06日 23時36分 UPDATE

エラーメッセージを記録・抑制したい

[長谷川 猛,ITmedia]

 コマンドの出力内容を「>」でリダイレクトした場合でも、エラーメッセージはリダイレクトされず、そのままコンソールに出力されてしまう。たとえば、ターミナル上で次のコマンドを実行した場合、出力内容は「result.txt」へ記録されるが、それでもエラーメッセージが画面上に表示されてしまうという具合だ。

$ ls -l nonexistent > result.txt
ls: nonexistent: No such file or directory

 上記のようにエラーメッセージ(ls: nonexistent: ...)がターミナル上に表示される。

 これは、エラーメッセージが「標準出力」(STDOUT)とは別の「標準エラー出力」(STDERR)に出力されているためだ。標準エラー出力を抑制したい場合には「2> /dev/null」と指定し、ヌル(null)デバイスへリダイレクトすればよい。また標準エラー出力を記録したい場合には、「2> error.txt」としてリダイレクトしよう。

$ ls nonexistent 2> /dev/null

 上記の例で標準エラー出力を抑制することができる。次に挙げる例は、標準出力が「result.txt」へ、標準エラー出力が「error.txt」へ記録される指定だ。

$ ls nonexistent > result.txt 2> error.txt
$ cat error.txt
ls: nonexistent: No such file or directory

 cronでジョブ予約が実行されている場合には、「標準エラー出力」が行われると、その実行ジョブオーナーに通知メールが送信される。もし、この通知メールが不要な場合には上記の方法で「標準エラー出力」を抑制すればよい。crontabエントリの行末に「2> /dev/null」を追加しよう。

0 * * * * ~/hourly-job.sh 2> /dev/null

関連Tips
cronなどに記述する「2> /dev/null」の「2」ってなに

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ