GNU/Linux >> Linux の 問題 >  >> Linux

stderrをBashのstdoutにリダイレクトする方法

コマンドの出力をファイルにリダイレクトしたり、別のコマンドにパイプしたりすると、エラーメッセージが画面に表示される場合があります。

Bashおよびその他のLinuxシェルでは、プログラムが実行されると、3つの標準I/Oストリームが使用されます。各ストリームは、数値のファイル記述子で表されます:

  • 0 - stdin 、標準の入力ストリーム。
  • 1 - stdout 、標準出力ストリーム。
  • 2 - stderr 、標準エラーストリーム。

ファイル記述子は、開いているファイルを表す単なる数字です。

入力ストリームは、通常、キーボードで入力することにより、プログラムに情報を提供します。

プログラム出力は標準入力ストリームに送られ、エラーメッセージは標準エラーストリームに送られます。デフォルトでは、入力ストリームとエラーストリームの両方が画面に出力されます。

出力のリダイレクト#

リダイレクトは、プログラムからの出力をキャプチャし、それを入力として別のプログラムまたはファイルに送信する方法です。

n>を使用してストリームをリダイレクトできます 演算子、ここで n はファイル記述子番号です。

nの場合 省略した場合、デフォルトで 1になります 、標準出力ストリーム。たとえば、次の2つのコマンドは同じです。どちらもコマンド出力をリダイレクトします( stdout )ファイルに。

command > file
command 1> file

標準エラーをリダイレクトするには( stderr 2>を使用します 演算子:

command 2> file

両方のstderrを書くことができます およびstdout 2つの別々のファイルに:

command 2> error.txt 1> output.txt

エラーメッセージが画面に表示されないようにするには、 stderrをリダイレクトします / dev / nullへ :

command 2> /dev/null

stderrをリダイレクトする stdoutへ #

プログラムの出力をファイルに保存する場合、 stderrをリダイレクトするのが一般的です。 stdoutへ すべてを1つのファイルにまとめることができます。

stderrをリダイレクトするには stdoutへ エラーメッセージを標準出力と同じファイルに送信するには、次を使用します。

command > file 2>&1

>ファイル stdoutをリダイレクトします ファイルへ 、および 2>&1 stderrをリダイレクトします stdoutの現在の場所へ 。

リダイレクトの順序は重要です。たとえば、次の例では、 stdoutのみをリダイレクトします。 ファイルへ 。これは、 stderrが原因で発生します stdoutにリダイレクトされます stdoutの前 fileにリダイレクトされました 。

command 2>&1 > file 

stderrをリダイレクトする別の方法 stdout&>を使用することです 構築します。 Bashで&> 2>&1と同じ意味です :

command &> file

結論#

コマンドラインで作業するときは、リダイレクトとファイル記述子の概念を理解することが非常に重要です。

stderrをリダイレクトするには およびstdout 2>&1を使用します または&> コンストラクト。

ご質問やご意見がございましたら、お気軽にコメントをお寄せください。


Linux
  1. Linuxで出力をファイルとStdoutにリダイレクトする方法

  2. Stderrのみをリダイレクトする方法は?

  3. 出力をファイルと標準出力にリダイレクトする方法

  1. スクリプトの同じ行で stderr と stdout を別のファイルにリダイレクトする方法は?

  2. system() の出力をファイルにリダイレクトする方法は?

  3. ドメインをローカルで別のドメインにリダイレクトするにはどうすればよいですか?

  1. プログラムの出力をZipファイルにリダイレクトする方法は??

  2. BashでCSVファイルを解析するには?

  3. bash:stderr をファイルにリダイレクトし、stdout + stderr を画面にリダイレクトします