通常,コマンドはキーボード(標準入力)から入力され,結果は画面(標準出力)に出力されます. しかし,コマンドの実行結果を利用して次の処理をするときに,実行結果をファイルや次のコマンドに出力できれば効率的に作業を行えます. シェルは``リダイレクション''と``パイプ''という コマンドの入力や出力を切り替える機能をもっています.
リダイレクションは,ファイルの内容を標準入力として使用したり,標準出力の内容をファイルに書き込むための機能です. リダイレクションを利用することによって,ファイルの内容をコマンドに入力したり,コマンドの実行結果をファイルに書き込めます. リダイレクションには,`<'や `>'を用います.
ファイルからデータを読み込んでコマンドに実行させるには,すなわちファイルの内容を標準入力として使う場合 `<'を用います. `<'の左側に実行するコマンドを,右側にそのコマンドに入力するファイルの名前を指定します.
コマンドの結果をファイルに出力するには,すなわちコメントの結果(標準出力)をファイルとする場合 `>'を利用します. `>'を 利用したリダイレクションには次の3つの書式があります.
1つめの`>'はコマンドの処理結果をファイルに上書きします. そのため,同じ名前のファイル名が存在する場合には,以前の内容は消去されてしまいます.
それに対して,2つめの`»'はコマンドの処理結果を,指定したファイルの末尾に書き加えます.
3つめの`>&'はコマンドの標準出力に加えて,標準エラー出力をファイルに上書きします. これはエラーメッセージな どをファイルに出力する場合 などに利用しますが,あまり利用することはありません.
次の例では,ls()コマンドの出力結果を`result'というファイルに書き込んでいます. なお` >'を利用した場合,コマンドの実行結果はファイルに出力されます.
% ls <ENTER> ← lsコマンドを実行してカレントディレクトリのファイルを表示 report.tex proposal.gif % ls > result <ENTER> ← lsコマンドの結果を`{result'というファイルに格納} % cat result <ENTER> ← `{result'というファイルの中身を読む} report.tex proposal.gif % _
パイプは,ある1つのコマンドの標準出力を 次のコマンドの標準入力として使用する際に利用します.
次の例では,`ls -l'の標準出力を次の lessコマンド() の標準入力として利用しています. こうすることで,lsコマンドの出力が1画面以上の長さにわたる場合でも,1画面ごとに止めて見られます.
% ls -l | less <ENTER> total 170 -rw-r--r-- 1 t03000tf 8963 Jan 6 10:51 01report.tex -rw-r--r-- 1 t03000tf 14413 Jan 6 10:51 02report.tex -rw-r--r-- 1 t03000tf 13680 Jan 6 10:51 03report.tex -rw-r--r-- 1 t03000tf 71738 Jan 6 10:51 04report.tex -rw-r--r-- 1 t03000tf 21617 Jan 6 10:51 05report.tex -rw-r--r-- 1 t03000tf 8725 Jan 6 10:51 06report.tex -rw-r--r-- 1 t03000tf 2040 Jan 6 10:51 kadai.tex -rw-r--r-- 1 t03000tf 176 Jan 6 10:48 mymemo.txt drwxr-xr-x 2 t03000tf 512 Jan 6 11:28 privateFile/ -rw-r--r-- 1 t03000tf 25819 Jan 6 10:51 reserch.tex :_
パイプは2つ以上のコマンドをつなぎ合わせられます. なお,パイプの後に`&'をつけると,コマンドの標準出力だけでなく標準エラー出力も 次のコマンドの入力として利用できます(表5.3).