STDERRがこのように/dev/nullにリダイレクトされるのはなぜですか?

STDERRがこのように/dev/nullにリダイレクトされるのはなぜですか?

これは私には理解できません。

wibble > /dev/null 2>&1

次のような場合、もっと意味があると思います。

wibble 2>&1 > /dev/null

つまり

Commands Output Sendall STDERRORS to STDOUT then SEND it all to /dev/null

コマンドリダイレクト順序の基本的なアイデアは何ですかxxx > /dev/null 2>1

答え1

リダイレクトは左から右に処理されます。そうすれば

2>&1 1> /dev/null

最初のリダイレクトは、stderr当時指しているストリーム(デフォルトではtty)を指します。エイリアスはstdout作成されません。stderrstdout

次にstdoutBitbucketにリダイレクトします。リダイレクトはstdout以前のリダイレクトには影響しませんstderrstderrまだttyを参照しています。

だから:

ls file_that_doesnt_exist 2>&1 1> /dev/null

端末にエラーメッセージが表示されます。

これbashリダイレクトドキュメントページには、以下が明示的に記載されています。

リダイレクトの順序が重要です。たとえば、次のコマンドは

          ls > dirlist 2>&1

標準出力と標準エラーをファイルのディレクトリリストとして指定し、コマンドは

          ls 2>&1 > dirlist

ファイルのディレクトリリストにのみ標準出力を指定します。標準エラーは、ディレクトリリストにリダイレクトされる前に標準出力からコピーされるためです。

関連情報