Subsections


2.4 標準入力とリダイレクト

2.4.1 標準入力

wc コマンドのように,キーボードからデータを受け取って処理できる UNIX コマンドは,多くの場合,正確には 標準入力 stdin (standard input) という入口から入力を読み込みます。 標準入力は,通常はキーボードに接続されているので,その結果として,コマンドはキーボードから入力を受け取るのです。
\includegraphics*{stdin.eps}
この図では,コマンドの標準エラー出力と標準出力の接続先(画面)を省略しています。 また,これ以降の図において,標準エラー出力の描画は略します。

2.4.2 標準入力のリダイレクト

標準出力の接続先を切り換えできるのと同様に,標準入力の接続先を切り換えること (リダイレクト) も可能です。
\includegraphics*{redirect_stdin}
command が標準入力からの入力を受け付けるコマンドであるとき,キーボードの代わりにファイル file から入力を受け取るようにするには
command [argument ...] < file
を実行します。

wc < year を実行しましょう。 これは wc の標準入力の接続先を,キーボードからファイル year に切り換える例です。

注意

wc の引数に既存のファイル名を指定して wc year を実行すると, wc は標準入力とは異なる入り口を用意して,そこから year を読み込みます。 実行結果は標準入力からの読み込みである wc < year と同じですが, wc の動作は異なります。
\includegraphics*{wc_openfile.eps}
一般に,ファイル名を引数にできるコマンドを,ファイル名を与えずに実行すると,データの入口として標準入力が使われることが多いです。 wc コマンドを wcwc < year と実行すれば,wc にはファイル名の引数はありませんので,入力に標準入力が使われます。

練習

  1. 標準入力のリダイレクトを使って,ファイル year を wc に読み込ませましょう。 ただし,今回は year の行数のみを wc に出力させてください。

    これは wc にオプション引数を指定することにより可能です。 何というオプションが必要か,は man wc で調べてください。 man コマンドを終了するには q を打つのでしたね。

2.4.3 標準入出力の同時リダイレクト

コマンドの標準入力と標準出力を同時に切り換えることもできます。 例えば,標準入力を year に,標準出力を wc.out に切り換えて wc コマンドを実行するには
wc < year > wc.out
とします。 これを試したら,不要な wc.out は削除しましょう。