Bash の標準ストリーム

Fumbani Banda 2023年1月30日
  1. 標準ストリーム
  2. 標準入力
  3. キーボードを使用した標準入力
  4. ファイルを使用した標準入力
  5. リダイレクトからの標準入力
  6. パイピングからの標準入力
  7. 標準出力
  8. 表示する標準出力
  9. ファイルにリダイレクトされる標準出力
  10. パイプを介した標準出力
  11. 標準エラー
  12. ファイルにリダイレクトされる標準エラー
  13. すべての出力をファイルにリダイレクトする
Bash の標準ストリーム

このチュートリアルでは、標準ストリームと、ファイルとの間の出力と入力のリダイレクトについて説明します。

標準ストリーム

Linux には、3つの標準ストリームがあります。標準入力(stdin)、標準出力(stdout)、および標準エラー(stderr)。各ストリームはファイル記述子で表されます。標準入力は 0 で表され、標準出力は 1 で表され、標準エラーは 2 で表されます。

標準入力

標準入力は、プログラムに渡されるデータです。これは通常、キーボードで入力することによって行われます。プログラムにパイプまたはリダイレクトされたデータの場合もあります。標準入力は、EOF(ファイルの終わり)を使用して入力データの終わりを示します。

キーボードを使用した標準入力

cat コマンドを使用して、キーワードからの入力データを使用した標準入力を示します。cat コマンドは入力を受け取り、それを画面に出力します。

Linux ターミナルを開き、cat と入力して、Enter キーを押します。これで任意の入力を入力でき、Enter キーを押すと、cat コマンドが端末に入力を表示します。cat コマンドはループで実行されます。それ以上の入力を受け取らないようにするには、CTRL + Dを押します。EOF を示す信号として機能します。

stdin-cat

ファイルを使用した標準入力

ファイルは、プログラムへの入力を提供することもできます。cat コマンドを使用して、ファイルを標準入力として使用できることを示します。

cat コマンドはファイル名を引数として取り、ファイルの内容を端末に表示します。次の画像では、cat コマンドがファイル output.txt を取得し、その内容を端末に表示します。

stdin2-cat

リダイレクトからの標準入力

標準入力リダイレクトは、標準入力リダイレクト演算子 < を使用します。入力リダイレクトでは、command < filename という表記が使用されます。これは、コマンドの入力が、指定されたファイル名内の内容から行われることを意味します。

下の画像では、output.txt の内容が cat コマンドに渡され、端末に出力されます。

stdin3-cat

パイピングからの標準入力

パイプ演算子は、コマンドの出力を別のコマンドへの入力として渡すために使用されます。パイプ演算子は垂直バー|です。

以下では、head コマンドがファイルの最初の 10 行 output.txt を取得し、それを標準入力として cat コマンドにパイプします。cat コマンドは、それを端末への出力として表示します。

stdin4-cat

標準出力

標準出力には、プログラムによって生成されたデータが表示されます。このデータは、リダイレクトまたはパイプ処理されていない場合、端末に出力されます。

表示する標準出力

ほとんどすべての Linux コマンドを使用して、標準出力を示すことができます。これを示すために、head コマンドを使用します。head コマンドは、引数としてファイル名を取り、ファイルの最初の 10 行のみを出力します。

stdout-head

ファイルにリダイレクトされる標準出力

標準出力リダイレクトは、標準出力リダイレクト演算子 > を使用します。出力リダイレクトでは、コマンド>ファイル名という表記が使用されます。これは、コマンドの出力を指定されたファイル名に書き込む必要があることを意味します。

command >> filename という表記は、既存のファイルを上書きするのではなく、コマンドの出力をファイルに追加することを意味します。>> は、追加リダイレクト演算子と呼ばれます。

出力リダイレクト演算子を使用して、ls コマンドの出力を output.txt ファイルにリダイレクトします。cat コマンドは、引数として渡されたファイルの内容を表示するために使用されます。

stdout-リダイレクト

パイプを介した標準出力

パイプ演算子は、コマンドの出力を別のコマンドに渡すために使用されます。パイプ演算子は垂直バー|です。

ここで、ls コマンドの出力は head コマンドにパイプされます。head コマンドは、端子にパイプされた入力から端子への最初の 5 行のみを表示します(標準出力)。

stdout-パイプ

標準エラー

標準エラーは、プログラムからのエラーメッセージに使用されることを除いて、標準出力と同様です。

ls コマンドを使用して、標準エラーを示します。ls コマンドは、フォルダ内のコンテンツを表示するために使用されます。引数として存在しないフォルダ名を ls コマンドに渡し、標準エラーを使用してエラーメッセージを表示します。

stderror-folder

ファイルにリダイレクトされる標準エラー

標準出力リダイレクト演算子を使用して、標準エラーをファイルにリダイレクトします。ただし、ファイル記述子として出力リダイレクト演算子 2>2 を追加して、標準エラーをリダイレクトすることを指定する必要があります。

ここで、ls コマンドの標準エラーをファイルにリダイレクトしましょう。2> は、ls コマンドによって生成されたエラーのみを errors_file.txt ファイルにリダイレクトする必要があることを指定します。

stderr-ファイル

cat コマンドを使用して、errors_file.txt の内容を表示してみましょう。以下に、ファイルに ls コマンドのエラーメッセージが含まれていることがわかります。

stderr-cat

すべての出力をファイルにリダイレクトする

標準出力と標準エラーの両方を同じファイルにリダイレクトするには、次の表記を使用します。

command > file 2>&1。コマンドの両方のストリームを指定されたファイルにリダイレクトします。

次の画像では、ls コマンドの標準出力と標準エラーの両方が同じファイル output.txt にリダイレクトされています。

出力-両方

著者: Fumbani Banda
Fumbani Banda avatar Fumbani Banda avatar

Fumbani is a tech enthusiast. He enjoys writing on Linux and Python as well as contributing to open-source projects.

LinkedIn GitHub