シェルでは最初から
が用意されている。
(本当は標準出力の他に標準エラー出力もある)
この標準入力、標準出力はリダイレクション、パイプなどで切替えることができる。
たとえば
# ls
とだけ打ち込んだ場合は、下の図のようにキーボード(標準入力)からはいった
コマンドの出力がディスプレイ(標準出力)に出力される。
リダイレクションを使用して標準出力の出力先をファイルdataに切替えると
# ls > data
lsの結果の出力先がファイルdataになる。
上の例は、標準出力の切替先がディスクの中のファイルだったが、
逆に、標準入力の入力元を、キーボードからファイルの切替えることもできる。
つまり、キーボードから入力データを読み込むコマンドがあった場合に、
リダイレクションによってその入力データの入力元を、
ファイルに切替えることができる。
例えば、標準入力から2つの数字を読み込んで、その数字の乗算の結果を出力するコマンドa.outが
あったとして
# a.out 3 2 <- キーボードから入力 6 <- a.outの出力した答え # cat data <- 同じ数値が書いてあるファイルを用意する 3 2 # a.out < data <- リダイレクションでファイルから入力 6 #
というように、標準入力をdataという名前のファイルに切替えることができる。
コマンドの入出力先は、今までのようにファイルだけでなく
別のコマンドにすることもできる。
例えば、lsは標準出力へ結果を出力する。
そしてwcというコマンドは引数がない場合は標準入力から入力する。
この2つのコマンドの出力と入力をパイプで結合すると、あたかも
1つのコマンドのように使用できる。
# ls a.out test.c # ls | wc 1 2 13 #
上のコマンドは以下のように打ち込んだのと同じ効果がある。
# ls a.out test.c # ls > tmp # wc < tmp 1 2 13 #
上の場合はtmpという一時的なファイルができるのと、 パイプを使う時よりも実行スピードも遅くなるので、あまりお進めできない。