通常,コマンドはキーボード (標準入力) から入力され, 結果は画面 (標準出力) に出力されます. しかし,コマンドの実行結果を利用して次の処理をするときに, 実行結果をファイルや次のコマンドに出力できれば効率的に作業を行えます. シェルは ``リダイレクション'' と ``パイプ'' という コマンドの入力や出力を切り替える機能をもっています.
リダイレクションは,
ファイルの内容を標準入力として使用したり,
標準出力の内容をファイルに書き込むための機能です.
リダイレクションを利用することによって,
ファイルの内容をコマンドに入力したり,
コマンドの実行結果をファイルに書き込めます.
リダイレクションには,
`<
' や
`>
' を用います.
ファイルからデータを読み込んでコマンドに実行させるには,
すなわちファイルの内容を標準入力として使う場合
`<
' を用います.
`<
' の左側に実行するコマンドを,
右側にそのコマンドに入力するファイルの名前を指定します.
[実行するコマンド] < [ファイル名]
コマンドの結果をファイルに出力するには,
`>
' を利用します.
`>
' を
利用したリダイレクションには次の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 t00000tf student 8963 1 6 10:51 01report.tex -rw-r--r-- 1 t00000tf student 14413 1 6 10:51 02report.tex -rw-r--r-- 1 t00000tf student 13680 1 6 10:51 03report.tex -rw-r--r-- 1 t00000tf student 71738 1 6 10:51 04report.tex -rw-r--r-- 1 t00000tf student 21617 1 6 10:51 05report.tex -rw-r--r-- 1 t00000tf student 8725 1 6 10:51 06report.tex -rw-r--r-- 1 t00000tf student 2040 1 6 10:51 kadai.tex -rw-r--r-- 1 t00000tf student 176 1 6 10:48 mymemo.txt drwxr-xr-x 2 t00000tf student 512 1 6 11:28 privateFile/ -rw-r--r-- 1 t00000tf student 25819 1 6 10:51 reserch.tex :_
パイプは2つ以上のコマンドをつなぎ合わせられます.
なお,
パイプの後に `&
' をつけると,
コマンドの標準出力だけでなく標準エラー出力も
次のコマンドの入力として利用できます
(表4.4).
[コマンド1] | [コマンド2]