コマンドの出力をファイルにリダイレクトしたり、別のコマンドにパイプしたりすると、エラーメッセージが画面に表示される場合があります。
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
を使用します または&>
コンストラクト。
ご質問やご意見がございましたら、お気軽にコメントをお寄せください。