1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

標準出力、標準エラー出力の出力先をチェック

Posted at

背景

標準出力と標準出力エラーを /dev/null にリダイレクトして破棄する時、正しく記述できているか不安になることが個人的によくあります。

which_is_correct?
$ script 2>&1 /dev/null

$ script > /dev/null 2>&1

手軽に動作確認をする手段として、以下のようなスクリプトを用意します。

stdcheck
#!/bin/bash

echo "This is stdout"
echo "This is stderr" 1>&2

確認例

1. 標準出力、標準エラー出力の両方を出力
$ stdcheck 
This is stdout
This is stderr
# リダイレクトしなければ、両方出力される
2. 標準出力のみを捨てる
$ stdcheck > /dev/null
This is stderr

$ stdcheck 1> /dev/null
This is stderr
3. 標準エラー出力のみを捨てる
$ stdcheck 2> /dev/null 
This is stdout
4. 標準出力、標準エラー出力の両方を捨ててみる(1)
$ stdcheck 2>&1 > /dev/null
This is stderr
#-> 標準エラー出力が捨てられていない(期待する動きではない)
5. 標準出力、標準エラー出力の両方を捨ててみる(2)
$ stdcheck > /dev/null 2>&1

#-> 標準出力、標準エラー出力の両方が捨てられている!
6. 標準出力、標準エラー出力の両方を捨ててみる(3)
$ stdcheck 2>&1 | cat > /dev/null

#-> パイプを通すと、この順番でも捨てられている!
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?