next up previous contents
: ファイルの検索 - find と : シェルの基本操作 : 環境変数とシェル変数   目次


パイプとリダイレクション

あるコマンドを実行した結果は、通常は、その端末エミュレータの画面に表示さ れます。また、コマンド名を間違って、存在しないコマンドを入力した場合の 「Command not found.」や「コマンドが見つかりません.」というエラーも 画面に表示されます。ユーザーから見ると、同じ様に表示されますが、UNIX で は、このふたつの表示は区別されています。コマンドが正常に動作して結果を表 示した場合は、標準出力という名前の出力を行ない、コマンドがエラー になった場合は、標準エラー出力という名前の出力を行なっています。 通常は、標準出力も標準エラー出力も画面に結びつけられているので、区別でき ないのです。標準出力や標準エラー出力を、画面以外のもの(通常はファイル) に結びつけることをリダイレクション(redirection)と呼び、「>」 や 「>>」 などの記号を用います。



練習 3

以下の操作を行なって、標準出力と標準エラー出力が異なることを確認しましょ う。また、「>」と「>>」の違いを理解しましょう。

  % ls -l  > ls1.txt (ls -l の出力を ls1.txt ファイルへ)
  % less ls1.txt  (内容を確認)
  % lls -l > ls2.txt (間違って、lls としてしまった場合)
  lls: コマンドが見つかりません.
  % ls -l ls?.txt  (ふたつのファイルの容量を確認)
  % cat ls2.txt
  % ls -l /usr/local/bin >> ls1.txt (ls -l の出力を、ls1.txt に追加)
  % less ls1.txt  (内容を確認)
  % rm ls?.txt  (ふたつのファイルを消去)
 

標準出力と標準エラー出力の他に、UNIX では標準入力というものがあ り、普通はキーボードに結びつけられています。wc(word count)というコマンド で、標準入力の使い方をみましょう。wc は、引数でファイルを指定した場 合はそのファイルに付いて、引数を与えないと標準入力についての、 行数、ワード数、文字数を標準出力に出力します。

  % wc  .cshrc
      68     228    1777 .cshrc
  % wc
  123 word      (適当にキーボードから入力してリターンキー)
  gjd test      (適当にキーボードから入力してリターンキー)
  3             (適当にキーボードから入力してリターンキー)
                (Ctrl + d を押す)
  3       5      20    (行数、ワード数、文字数を表示)
Ctrl + d が、キーボードからの標準入力の終了キーです60

標準入力と標準出力、標準エラー出力の 3つがあることがわかりました。あるコ マンドの標準出力を、他のコマンドの標準入力に結びつけることを、パ イプ(正確にはパイプライン、pipeline)と呼び、「|」 の記号を使い ます。wc の場合と同様に、UNIX の多くのコマンドが、引数としてのファイルが 省略された場合には、標準入力に対して処理をするように作成されています。 例えば、次のような使い方ができます。

  % ls -l /usr/local/bin | less   (ls -l の出力を less で表示)
  % ls /usr/local/bin | grep tex | wc -l
       (/usr/local/bin 以下で、tex をファイル名に含むファイルの数を出力)
  % grep includegraphics *.tex | wc -l 
       (カレントディレクトリで、ファイル名が.texで終わるものすべてに
          ついて、 includegraphics を含む行数の総和を出力)

パイプは、いくつでもつなげることができます。また、grep とか sort とか uniq というコマンドを組み合せることが良く行なわれます。