Help us understand the problem. What is going on with this article?

bash:標準出力も標準エラーもログに出力

More than 3 years have passed since last update.

障害対応時などの一刻を争う調査などの際、この挙動にハマってしまって対応が遅れるケースを見てきたんで共有です。

test.sh

sonna_file_naiyo.txtが存在しないとして

#!/bin/sh

echo "foo"
cat ./sonna_file_naiyo.txt
echo "bar"

で、このスクリプトを

teeでロギングしちゃうよ!

$ sh ./test.sh | tee test.log
foo
cat: ./sonna_file_naiyo.txt: No such file or directory
bar

logの中身を見てみるよ!

$ cat ./test.log 
foo
bar

(´・ω・`) 標準エラー出力がファイルに吐かれてないお・・・なぜだお・・・

標準出力&標準エラーどちらもロギングする場合

標準エラー出力を標準出力にリダイレクトする方法を検討しましょ

$ sh ./test.sh 2>&1 | tee test.log
foo
cat: ./sonna_file_naiyo.txt: No such file or directory
bar

確認するよ!

$ cat ./test.log 
foo
cat: ./sonna_file_naiyo.txt: No such file or directory
bar

(∩´∀`)∩ワーイ

teeではなくファイルへのリダイレクトを使う場合

>>>でファイルへ出力するケースもあると思います。

その際にも同様にリダイレクトを行いますが、どこに記述するかについて慎重になるべきです

$ sh ./test.sh > test.log 2>&1

$ cat test.log 
foo
cat: ./sonna_file_naiyo.txt: No such file or directory
bar

上記は想定通りの挙動例

指定の順番や位置を間違えると

意図しない状況になりますので注意です

$ sh ./test.sh | tee test.log 2>&1
foo
cat: ./sonna_file_naiyo.txt: No such file or directory
bar

$ cat test.log 
foo
bar
$ sh ./test.sh 2>&1 > test.log
cat: ./sonna_file_naiyo.txt: No such file or directory

$ cat test.log 
foo
bar

(´・ω・`)結構ハマりやすいと思うので、注意したいですね(自戒)

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした