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

> /dev/null 2>&1; 順序が逆では駄目な理由

後輩に説明するのにググったけどあんまりいい説明がなかった。

ポイント

この謎を解くための前知識。

  • >1> の省略形であるということ
  • リダイレクトは左から順番に処理されるということ
  • 2>&1 は「標準エラーの出力先を標準出力にする」ではなく、
    「標準エラーの出力先を標準出力と同じ場所にする」であるということ

図解

例文

$ (echo "hoge" ; ecoh "fuga")
hoge
-bash: ecoh: コマンドが見つかりません
  • hoge が標準出力
  • -bash: ecoh: コマンドが見つかりません が標準エラー

例1: > /dev/null 2>&1 の場合

例文

$ (echo "hoge" ; ecoh "fuga") > /dev/null 2>&1

STEP1. (echo "hoge" ; ecoh "fuga") まで

$ (echo "hoge" ; ecoh "fuga")

01.png

これは流石に分かるとおもうので説明は割愛。

STEP2. (echo "hoge" ; ecoh "fuga") > /dev/null まで

$ (echo "hoge" ; ecoh "fuga") > /dev/null

02.png

冒頭に書いたとおり、>1> の省略形である。
つまり標準出力(1)の出力先を変えたことになる。

STEP3. (echo "hoge" ; ecoh "fuga") > /dev/null 2>&1 まで

$ (echo "hoge" ; ecoh "fuga") > /dev/null 2>&1

03.png

冒頭に書いたとおり、2>&1 は、標準エラー(2)の出力先を標準出力(1)と同じ場所にするである。

したがって、図のとおり出力先は /dev/null となる。

例2: 2>&1 > /dev/null の場合

例文

$ (echo "hoge" ; ecoh "fuga") 2>&1 > /dev/null

STEP1. (echo "hoge" ; ecoh "fuga") まで

$ (echo "hoge" ; ecoh "fuga")

01.png

例1.と同じ。説明は割愛。

STEP2. (echo "hoge" ; ecoh "fuga") 2>&1 まで

$ (echo "hoge" ; ecoh "fuga") 2>&1

04.png

冒頭に書いたとおり、2>&1 は、標準エラー(2)の出力先を標準出力(1)と同じ場所にするである。

標準出力(1)、標準エラー(2)ともに出力先はもともと「コンソール画面」である。
ここで標準エラー(2)の出力先を標準出力(1)と同じ場所にするということは、出力先を「コンソール画面」にするということ。
つまり何も変っていない。

STEP3. (echo "hoge" ; ecoh "fuga") > /dev/null 2>&1 まで

$ (echo "hoge" ; ecoh "fuga") 2>&1 > /dev/null

05.png

冒頭に書いたとおり、>1> の省略形である。
つまり標準出力(1)の出力先を変えたことになる。

このとき標準エラー(2)については出力先を変更していない。
よって上記図のとおり標準出力(1)のみが /dev/null に出力され、
標準エラー(2)についてはコンソール画面に出てしまう。

ということである。

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
ユーザーは見つかりませんでした