Bash の標準ストリーム
- 標準ストリーム
- 標準入力
- キーボードを使用した標準入力
- ファイルを使用した標準入力
- リダイレクトからの標準入力
- パイピングからの標準入力
- 標準出力
- 表示する標準出力
- ファイルにリダイレクトされる標準出力
- パイプを介した標準出力
- 標準エラー
- ファイルにリダイレクトされる標準エラー
- すべての出力をファイルにリダイレクトする
このチュートリアルでは、標準ストリームと、ファイルとの間の出力と入力のリダイレクトについて説明します。
標準ストリーム
Linux には、3つの標準ストリームがあります。標準入力(stdin
)、標準出力(stdout
)、および標準エラー(stderr
)。各ストリームはファイル記述子で表されます。標準入力は 0
で表され、標準出力は 1
で表され、標準エラーは 2
で表されます。
標準入力
標準入力は、プログラムに渡されるデータです。これは通常、キーボードで入力することによって行われます。プログラムにパイプまたはリダイレクトされたデータの場合もあります。標準入力は、EOF(ファイルの終わり)を使用して入力データの終わりを示します。
キーボードを使用した標準入力
cat
コマンドを使用して、キーワードからの入力データを使用した標準入力を示します。cat
コマンドは入力を受け取り、それを画面に出力します。
Linux ターミナルを開き、cat
と入力して、Enter キーを押します。これで任意の入力を入力でき、Enter キーを押すと、cat
コマンドが端末に入力を表示します。cat
コマンドはループで実行されます。それ以上の入力を受け取らないようにするには、CTRL + Dを押します。EOF を示す信号として機能します。
ファイルを使用した標準入力
ファイルは、プログラムへの入力を提供することもできます。cat
コマンドを使用して、ファイルを標準入力として使用できることを示します。
cat
コマンドはファイル名を引数として取り、ファイルの内容を端末に表示します。次の画像では、cat
コマンドがファイル output.txt
を取得し、その内容を端末に表示します。
リダイレクトからの標準入力
標準入力リダイレクトは、標準入力リダイレクト演算子 <
を使用します。入力リダイレクトでは、command < filename
という表記が使用されます。これは、コマンドの入力が、指定されたファイル名内の内容から行われることを意味します。
下の画像では、output.txt
の内容が cat
コマンドに渡され、端末に出力されます。
パイピングからの標準入力
パイプ演算子は、コマンドの出力を別のコマンドへの入力として渡すために使用されます。パイプ演算子は垂直バー|
です。
以下では、head
コマンドがファイルの最初の 10 行 output.txt
を取得し、それを標準入力として cat
コマンドにパイプします。cat
コマンドは、それを端末への出力として表示します。
標準出力
標準出力には、プログラムによって生成されたデータが表示されます。このデータは、リダイレクトまたはパイプ処理されていない場合、端末に出力されます。
表示する標準出力
ほとんどすべての Linux コマンドを使用して、標準出力を示すことができます。これを示すために、head
コマンドを使用します。head
コマンドは、引数としてファイル名を取り、ファイルの最初の 10 行のみを出力します。
ファイルにリダイレクトされる標準出力
標準出力リダイレクトは、標準出力リダイレクト演算子 >
を使用します。出力リダイレクトでは、コマンド>ファイル名
という表記が使用されます。これは、コマンドの出力を指定されたファイル名に書き込む必要があることを意味します。
command >> filename
という表記は、既存のファイルを上書きするのではなく、コマンドの出力をファイルに追加することを意味します。>>
は、追加リダイレクト演算子と呼ばれます。
出力リダイレクト演算子を使用して、ls
コマンドの出力を output.txt
ファイルにリダイレクトします。cat
コマンドは、引数として渡されたファイルの内容を表示するために使用されます。
パイプを介した標準出力
パイプ演算子は、コマンドの出力を別のコマンドに渡すために使用されます。パイプ演算子は垂直バー|
です。
ここで、ls
コマンドの出力は head
コマンドにパイプされます。head
コマンドは、端子にパイプされた入力から端子への最初の 5 行のみを表示します(標準出力)。
標準エラー
標準エラーは、プログラムからのエラーメッセージに使用されることを除いて、標準出力と同様です。
ls
コマンドを使用して、標準エラーを示します。ls
コマンドは、フォルダ内のコンテンツを表示するために使用されます。引数として存在しないフォルダ名を ls
コマンドに渡し、標準エラーを使用してエラーメッセージを表示します。
ファイルにリダイレクトされる標準エラー
標準出力リダイレクト演算子を使用して、標準エラーをファイルにリダイレクトします。ただし、ファイル記述子として出力リダイレクト演算子 2>
に 2
を追加して、標準エラーをリダイレクトすることを指定する必要があります。
ここで、ls
コマンドの標準エラーをファイルにリダイレクトしましょう。2>
は、ls
コマンドによって生成されたエラーのみを errors_file.txt
ファイルにリダイレクトする必要があることを指定します。
cat
コマンドを使用して、errors_file.txt
の内容を表示してみましょう。以下に、ファイルに ls
コマンドのエラーメッセージが含まれていることがわかります。
すべての出力をファイルにリダイレクトする
標準出力と標準エラーの両方を同じファイルにリダイレクトするには、次の表記を使用します。
command > file 2>&1
。コマンドの両方のストリームを指定されたファイルにリダイレクトします。
次の画像では、ls
コマンドの標準出力と標準エラーの両方が同じファイル output.txt
にリダイレクトされています。