標準入出力

標準入出力とは

シェルでは最初から

が用意されている。 (本当は標準出力の他に標準エラー出力もある)
この標準入力、標準出力はリダイレクションパイプなどで切替えることができる。
たとえば
# ls
とだけ打ち込んだ場合は、下の図のようにキーボード(標準入力)からはいった コマンドの出力がディスプレイ(標準出力)に出力される。
[標準入出力の説明図]

リダイレクションを使用して標準出力の出力先をファイルdataに切替えると
# ls > data
lsの結果の出力先がファイルdataになる。
[lsの出力先を説明する図]

上の例は、標準出力の切替先がディスクの中のファイルだったが、 逆に、標準入力の入力元を、キーボードからファイルの切替えることもできる。
つまり、キーボードから入力データを読み込むコマンドがあった場合に、 リダイレクションによってその入力データの入力元を、 ファイルに切替えることができる。
例えば、標準入力から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という一時的なファイルができるのと、 パイプを使う時よりも実行スピードも遅くなるので、あまりお進めできない。

参考


Home | Contents
Mail