==Linux ストリーム、パイプおよびリダイレクト==
[[Linux][Linux コマンド]]
{{amazon|487311070X}}
*パイプ記号は一方のコマンドの出力を他方の入力にするようにシェルに指示するが、これは特殊なリダイレクトと言える
*リダイレクトでは、入力ストリームの作成元と出力ストリームの宛先を管理できる
====リダイレクト演算子 > > で出力を直接ファイルに送る====*リダイレクト演算子 > > を使用することで、iノード番号のリストを直接ファイルに送る例 $ ls -i * | awk '{print $1}' | sort -nu > > in.txt
*シェルは空のファイル(in.txt)を作成し、ファイルを書き込み可能とする。そして、結果を標準出力ではなく、このファイルに出力する
====リダイレクト演算子 >> >> で出力を既存のファイルに追加する====
*in.txt に脚注を1行追加する例
$ echo "end of list" >> >> in.txt
*存在していれば追記、なければ新規作成が行われる
====標準入力のリダイレクト <<====
*キーボードではなくファイルの内容を入力に使用する
=====in.txt の内容を記載したメールメッセージをユーザー jdean に送信=====
*通常Mailプログラムは端末からの入力をユーザーに求めるが、標準入力をin.txtに
リダイレクトするとMailはユーザーに入力を求めることなく処理を実行
$ Mail -s "inode list" jdean < < in.txt
====bashシェルの標準I/Oリダイレクト====
{|class="wikitable"
|-
|stdoutをfileに
|$ cmd > > file|$ cmd 1> > file
|-
|stderrをfileに
|$ cmd 2> > file
|-
|stdoutとstderrの両方をfileに
| $cmd > > file 2>>&1
|-
|stdoutをファイルに、stderrをfile2へ
|$ cmd > > file 2 > > file2
|-
|fileからstdinをうけとる
|$ cmd < < file
|-
|file にstdoutを追加する
|$ cmd >> >> file| $ cmd 1>>>>file
|-
|file にstderrを追加する
|$ cmd 2>> >> file
|-
|file にstdoutとstderrの両方を追加する
|$ cmd >>>>file 2>>&1
|-
|cmd1 のstdoutを cmd2にパイプでつなぐ
|-
|cmd1 のstdoutとstderrをcmd2にパイプでつなぐ
|$ cmd1 2>>&1 cmd2
|-
|}
*プログラムを実行したとき、出力をファイルに送り同時に画面にも表示したい場合に使用する
*cmd1、cmd2、cmd3の書くコマンドからなるパイプラインを実行したい場合、最後の結果がfile1に書き込まれる
$ cmd1 | cmnd2 | cmd3 > > file1
*cmd1の中間結果を参照したい場合、file_cmd1ファイルを新規に作成して中間結果を書き込むには、teeを使用する
$ cmd1 | tee file_cmd1 | cmd2 | cmd3 > > file1