1. ホーム
  2. bash

[解決済み] シェルで、「2>&1」はどういう意味ですか?

2022-03-14 08:43:44

質問

Unix シェルで、次のように組み合わせます。 stderrstdoutstdout ストリームをさらに操作するために、コマンドの最後に次のように付け加えます。

2>&1

ということで、もし私が head からの出力に対して g++ というようなことができます。

g++ lots_of_errors 2>&1 | head

で、最初の数個のエラーだけ見ることができます。

私はいつもこれを覚えるのが大変で、いつも調べに行かなければならないのですが、それは主にこの特別なトリックの構文を完全に理解していないためです。

誰かこれを分解して、1文字ずつ説明してくれませんか? 2>&1 というのは?

どのように解決するのですか?

ファイルディスクリプタ1が標準出力( stdout ).
ファイル記述子2は、標準エラー( stderr ).

ここで、この構成の覚え方の一つを紹介します(完全に正確というわけではありませんが):最初は。 2>1 をリダイレクトするのは良い方法のように見えるかもしれません。 stderr から stdout . しかし、実際には "リダイレクトと解釈されるでしょう。 stderr という名前のファイルに 1 "です。 & は、その前後にあるものがファイル記述子であり、ファイル名ではないことを示します。つまり、構成は次のようになる。 2>&1 .

考える >& をリダイレクトマージ演算子とする。