標準入出力についてとcatコマンドを用いたテスト
標準入出力の概要
コマンドが実行されると、1系統の入力「標準入力」と2系統の出力「標準出力」「標準エラー出力」が確保される。既定では標準入力はキーボードからの入力、標準出力と標準エラー出力は端末へのメッセージ出力となっている。これらはまとめて標準入出力と呼ばれることがある。この入出力は「パイプ」というものを用いるとあるプロセスの出力を別のプロセスの入力としてつなぐことができるようになっていて、(解析・加工などの後に)更に別のプロセスへ渡すといったこともできる。シェル上の標準的な指定では(書き込み側の)標準出力と(読み取り側の)標準入力が接続されるが、指示しだいで標準エラー出力との接続も可能。
2系統用意されている出力の内、標準出力は標準的な用途(通常メッセージの表示)で行われ、標準エラー出力はエラーメッセージなどの出力用途で標準出力とは別に用意されている。標準エラー出力には出力が即座に行われる(バッファされない)*1という特徴もあり、これもエラー表示用途に役立っている。
また、指示により、標準入力にファイルを指定して読み込ませたり標準出力にファイルを指定して出力を書き出させたりすることもでき、これはリダイレクトと呼ばれる。
標準入出力はファイルと同様「ファイル記述子」というもので扱われ、扱い方もファイルと同じようにできる。標準入出力のファイル記述子値はそれぞれ決まっている。
名前 | 用途 | ファイル記述子の値 |
---|---|---|
標準入力 | 入力されるデータ | 0 |
標準出力 | 通常のメッセージ出力 | 1 |
標準エラー出力 | エラーなどのメッセージ出力 | 2 |
catコマンドによる既定の標準入力と標準出力のテスト
catコマンドは引数がないときに標準入力を標準出力にそのまま出力する。$ cat[Enter]
ここで適当な文字列を入力してCtrl+Dを押すと標準入力を渡す。ここでは「TEST」と入力後Ctrl+Dを押す(終端であることを知らせる)*2ことにする。
$ cat TEST[Ctrl+D]
すると
$ cat TESTTEST[カーソル位置]
のように端末に今入力した文字列が出力される。更に「12345」と入力しCtrl+Dを押すと
$ cat TESTTEST12345[Ctrl+D]
最初のときと同様
$ cat TESTTEST1234512345[カーソル位置]
のように出力される。文字列(ここでは「ABC」)を入力した後Enterを押した場合は
$ cat TESTTEST1234512345ABC[Enter]
そこで改行しつつ、そこまでの文字列が表示される。
$ cat TESTTEST1234512345ABC ABC [カーソル位置]
何も入力していない状態でCtrl+Dを押すと終了する。
$ cat TESTTEST1234512345ABC ABC [Ctrl+D] $