next up previous contents index
Next: 4.6 ヒストリ機能 Up: 4. シェルを利用する Previous: 4.4 エイリアス機能


       
4.5 入出力のリダイレクションとパイプ

通常,コマンドはキーボード(標準入力)から入力され,結果は画面(標準出力) に表示される. しかし,コマンドの実行結果を用いて次の処理をしたいようなときに, 実行結果をファイルに出力できれば効率的に作業を行える. シェルはコマンドの入力や出力を切り替える機能をもっており, ここではリダイレクションとパイプの2種類について説明する.

     
4.5.1 リダイレクション

       

リダイレクションは,ファイルの内容を標準入力として使用したり, 標準出力の内容をファイルに書き込むための機能である. リダイレクションを使うことによって, ファイルの内容をコマンドに入力したり,コマンドの 実行結果をファイルに書き込める.リダイレクションには,``<''や ``>>''を用いる.

   
リダイレクションを用いた入力

ファイルからデータを読み込んでコマンドに実行させるには,``<''を 用いる.``<''の左側に実行するコマンドを,右側にコマンドに入 力する内容を書いたファイルの名前を指定する.

% [実行するコマンド] < [ファイル名]<RET>

   
リダイレクションを用いた出力

コマンドの結果をファイルに出力するには``>''を用いる. ``>''を用いたリダイレクションには次の3つの書式がある.

% [コマンド] >  [出力するファイル名]<RET>
% [コマンド] >> [出力するファイル名]<RET>
% [コマンド] >& [出力するファイル名]<RET>
1つめはコマンドの処理結果をファイルに上書きする.そのため,同じ名前の ファイル名が存在する場合には,以前の内容は消去されてしまう.それに対し て,2つめはコマンドの処理結果を指定したファイルに書き加える.3つめの ``>&''はコマンドの標準出力に加えて,標準エラー出力をファイルに 上書きする.これはコンパイル時のエラーなどをファイルに出力する場合などに用 いる.次の例では,lsコマンドの出力結果をdirectoryというファ イルに書き込んでいる.なお``>''を用いた場合,コマンドの実行結果 は表示されない.

% ls<RET>
report.tex      proposal.gif
% ls > directory<RET>
% less directory<RET>
report.tex      proposal.gif
% _

     
4.5.2 パイプ

パイプは,ある1つのコマンドの標準出力を次のコマンドの標準入力として使 用する際に用いる.

次の例では,ls -lの標準出力を次のlessコマンド ()の標準入力として用いている.このよ うにすることで,lsコマンドの出力が1画面以上の長さにわたる場合に, 1画面ごとに止めて見られる.

% ls -l | less<RET>
このように,パイプは2つ以上のコマンドをつなぎ合わせられる.なお,パイ プの後に``&''をつけると,コマンドの標準出力だけでなく標準エラー 出力も次のコマンドの入力として使える(表).

% [コマンド1] | [コマンド2]<RET>

 
表: パイプの種類
  
記号 意味
| 標準出力のパイプ
|& 標準出力と標準エラー出力のパイプ

同じファイル名をコマンドの入力と出力先に指定してはいけない.同じファイ ル名を指定するとファイルの内容が失われてしまう.出力リダイレクトによる 既存のファイルへの書き込みや,新規ファイルの作成を防止するときには,あ らかじめシェルで``set noclobb
er''と入力しておく.なお, noclobberが設定された状態でリダイレクトによるファイルの書き込みをする 場合には,``>!'' (上書き)や``>>!'' (追加)を用いる.