ウェブサイト検索

Bashでの標準入力、標準エラー出力、標準出力のストリームの使い方


Linuxオペレーティングシステムが起動すると、3つのストリームが開かれます。これらはstdin、stdout、stderrです。stdinの完全な形式は標準入力で、ユーザーからの入力を受け取るために使用されます。stdoutの完全な形式は標準出力で、コマンドの出力をstdoutストリームに格納するために使用されます。stderrの完全な形式は標準エラーで、任意のコマンドから生成されたエラーメッセージをデータストリームに格納するために使用されます。これらのストリームの使用法はこのチュートリアルで示されています。stdin、stdout、およびstderrの対応する数値識別子の値はそれぞれ0、1、2です。

標準入力、標準出力、および標準エラーのリダイレクト演算子

    • "<" または "0<" は stdin ストリームに使用されます。
    • 「>」または「1>」はstdoutストリームに使用されます。
    • 「2」はstderrストリームに使用されます。

標準入力、標準出力、および標準エラーの使用

このチュートリアルのこの部分では、標準入力、標準出力、および標準エラーの使用法が複数の例を用いて示されています。

例1: Stdinの使用

ファイルの内容を取得し、ターミナルに表示する方法は、この例に示されています。

以下の「cat」コマンドを実行して、いくつかの内容を含む testdata.txt という名前のテキストファイルを作成してください:

cat > testdata.txt

以下の「cat」コマンドを実行して、testdata.txtファイルにコンテンツを追加してください。

cat >> testdata.txt

次の「cat」コマンドを実行して、testdata.txtファイルから入力を取得し、それをターミナルに表示します:

cat < testdata.txt

出力:

次の出力は、testdata.txtファイルに「linux-console.net」と「Scripting Language」という文字列を追加した後、前のコマンドを実行した後に表示されます:

例2: Stdoutの使用

この例では、パイプ(|)とリダイレクションオペレーターを使用してファイルを作成する方法が示されています。

次のコマンドを実行して、文字列データをtestdata2.txtという名前のテキストファイルにパイプを使って書き込みます。「echo」コマンドの出力は、パイプ(|)オペレーターを使用して「cat」コマンドの入力に送られます:

echo "Learn Bash Programming" | cat > testdata2.txt

次の「cat」コマンドを実行して、testdata2.txtファイルの内容を確認してください。

cat testdata2.txt

出力:

以前のコマンドを実行した後、以下の出力が表示されます。この出力によると、「echo」コマンドの出力はtestdata2.txtファイルに書き込まれます:

次のコマンドを実行して、“ls -l”コマンドの出力をリダイレクションオペレーター(‘>’)を使用して、list.txtという名前のテキストファイルに書き込みます:

ls -l  > list.txt

次の「cat」コマンドを実行して、list.txtファイルの内容を確認してください:

cat list.txt

出力:

前のコマンドを実行した後、以下の出力が表示されます。この出力によると、「ls -l」コマンドの出力がlist.txtファイルに書き込まれています:

例3: StdinとStdoutの使用

ファイルから入力を取り込み、ファイルに書き込むためにstdinとstdoutの両方を使用する方法は、この例に示されています。

以下の「cat」コマンドを実行して、testdata.txtファイルの内容をtestfile.txtファイルと端末に書き込みます:

cat < testdata.txt > testfile.txt

次の「cat」コマンドを実行して、testdata.txtファイルの内容を表示します:

cat testdata.txt

次の「cat」コマンドを実行して、testfile.txtファイルの内容を表示します:

cat testfile.txt

出力:

以前のコマンドを実行した後、以下の出力が表示されます。この出力によると、testdata.txtファイルの内容がtestfile.txtファイルに書き込まれ、ターミナルに表示されます。

例4: Stderrの使用

標準エラーの内容は、ターミナルに印刷することも、ファイルにリダイレクトすることも、リサイクルビンのように機能する/dev/nullに送信することもできます。標準エラーを渡す異なる方法は、この例に示されています。

以下のコマンドは有効であり、「Hello」文字列を改行付きで印刷します。したがって、以下のコマンドに対して標準エラーは生成されません。

printf "%s\n" "Hello"

次のコマンドは「pirntf」という名前のコマンドが存在しないため無効です。そのため、標準エラーが生成され、エラーがターミナルに表示されます:

pirntf "%s\n" "Hello"

出力:

前のコマンドを実行した後に以下の出力が表示されます。この出力によれば、標準エラーが端末に印刷されています:

時には、標準エラーを隠すことによってカスタムエラーを印刷し、ユーザーにとってより理解しやすくする必要があります。この作業は、エラーを /dev/null にリダイレクトすることで行うことができます。ここでの「2>」は、エラーを /dev/null にリダイレクトするために使用されます。

次のコマンドを実行して、エラーを/dev/nullにリダイレクトします。これにより、エラーが存在する場合でもエラーは表示されません。

pirntf "%s\n" "Hello" 2> /dev/null

出力:

前のコマンドを実行した後に次の出力が表示されます。出力によると、標準エラーは端末に印刷されず、/dev/null にリダイレクトされています:

時々、標準エラーは将来の使用のためにファイルに保存する必要があります。このタスクは、「2>」演算子を使用してエラーをファイルにリダイレクトすることで実行できます。

標準エラーを errorfile.txt という名前のファイルにリダイレクトするために、以下のコマンドを実行してください。

pirntf "%s\n" "Hello" 2> errorfile.txt

エラーファイルの内容を確認するには、次のコマンドを実行してください。

cat errorfile.txt

出力:

前のコマンドを実行した後、次の出力が表示されます。出力によれば、標準エラーは正しく errorfile.txt ファイルに書き込まれています:

標準エラーは、次のコマンドを使用して /dev/null と errorfile.txt ファイルの両方にリダイレクトできます:

pirntf "%s\n" "Hello" 2> /dev/null > errorfile.txt

結論

このチュートリアルでは、stdin、stdout、stderrの使用方法が複数の例を用いて説明されており、Linuxユーザーがこれらのストリームの概念を理解し、必要に応じて適切に使用できるようにしています。