とらりもんHOME  Index  Search  Changes  Login

とらりもん - 標準入出力・リダイレクト・パイプ Diff

  • Added parts are displayed like this.
  • Deleted parts are displayed like this.

!作成者
筑波大学農林工学系 奈佐原(西田)顕郎

!標準入出力

lsやcatの実行結果は、何も指定しないと、普通は画面に表示される。このように、UNIXでは、何も指定しないときに入出力するデバイスを「''標準入出力''」と呼び、デフォルト(初期設定状態)ではそれぞれキーボードと画面になっている。

!リダイレクト
しかし、「''リダイレクト''」という技を使うと、それらをユーザー指定のファイルに変更することができる。

*例 ("$"はプロンプトなので、入力する必要無し):

$ cd
(ホームディレクトリに移動)
$ ls -la /
(ルートディレクトリの内容を画面に表示)
$ ls -la / > list.txt
(上と同じ命令だが、結果を画面に出すのではなく、list.txtというファイルに書き込む)
$ cat list.txt
(list.txtというファイルの内容を表示)

このように、">"という記号で標準出力を画面からファイルに変更できる。これを''出力リダイレクト''と呼ぶ。ちなみに、''">"のかわりに">>"を使うと、そのファイルの末尾に追加することになる。''

同様に、"<"という記号で、標準入力をキーボードからファイルに変更できる。これを''入力リダイレクト''と呼ぶ。

例えば、bcというコマンドは、簡単な四則演算をするコマンドだが、これを使って入力リダイレクトを経験してみよう。

まず、普通にbcを使ってみる:

$ bc
2+3
5
quit

このように、bcコマンドは、2+3という式をキーボードから入れたら5という答えを返す。

こんどは、viによって、以下のような内容のテキストファイルを, calc.txtというファイル名で作れ:

2+3
2*3

そして、次のコマンドを実行せよ:

$ bc < calc.txt
5
6

上のように、計算結果の5と6という数字が表示されるはずである。このように、あるコマンドにデータ(ここでは2+3とか2*3といった計算式)をわたすとき、そのコマンドが標準入力に対応していれば、入力リダイレクト"<"によって、ファイルからコマンドにデータをわたす(入力する)ことができる。

入力リダイレクト"<"と出力リダイレクト">"によって、コマンドへの入力と出力を、両方ともそれぞれファイルにすることができる。例えば、上の例では、

$ bc < calc.txt > calc_out.txt

とすれば、calc.txtというファイルに記述された計算式を計算した結果はcalc_out.txtというファイルに書き込まれる。

!パイプ

一方、あるコマンドの実行結果を、画面(標準出力)に出さないで、ダイレクトに他のコマンドへ入力として受け渡すこともできる。たとえば、以下を実行してみよう:

$ echo 2+3
2+3
$ echo 2+3 | bc
5

ここでecho 2+3というコマンドは、"2+3"という文字列を標準出力、つまり画面に出すだけである。しかし、そのコマンドに続いて、| bcとすると、echo 2+3の結果、すなわち"2+3"という文字列が、bcというコマンドに渡される。このように、"|"という記号をはさんで複数のコマンドを連結すれば、一つのコマンドが出す標準出力を、次のコマンドの標準入力に受け渡すということができるのである。このような機能のことや、特にそれを実現する"|"という記号のことを、「''パイプ''」と呼ぶ。

パイプを使えば、たくさんのコマンドを数珠つなぎに連結して、あたかもひとつの大きなコマンドのようにすることができる。これはUNIXの極めて本質的な利点である。ひとつひとつ小さな機能を持った小さなコマンドを、標準入出力とパイプを介して組合せ、複雑で大きな処理をする、というのが「UNIXの上手な使いかた」なのである。

パイプを利用したコマンドの例として、以下のようなものは、日常、よく使われる:

$ ls -l /bin | less

これは、/binというディレクトリのファイルリストを表示するものだが、このディレクトリには非常にたくさんのファイルがあるので、画面ひとつには収まらない。そこで、パイプでlessというコマンドをくっつける。lessは、標準入力から得たデータを、画面の1ページづつに区切って表示する機能を持つ。従って、この一連のコマンドによって、/binのファイルのリストが、画面上を流れてしまわずに、1ページづつ表示される(進むにはスペースキーを押す。終了はq)。

!ヒアドキュメント

リダイレクトの特殊なケースとして、''ヒア・ドキュメント''という使い方がある。例として、以下のようにコマンドラインから打ち込んでみよ:

$ bc << EOF
2+3
2*3
EOF

すると、

5
6

と表示されるだろう。この場合、bcコマンドへの入力は、キーボードから行われたのだが、ぜんぶの入力が終ってEOFという語を最後に打ち込んではじめてbcコマンドが動作するという点で、普通のキーボード入力のときのbcコマンドの動作とは違っている。このような入力のしかたを、ヒア・ドキュメントという。

ヒア・ドキュメントは、実際はコマンドラインから使うことは少なく、むしろ後述する''シェルスクリプト''の中で、gnuplotなどのコマンドを操作するときによく使う。

!参考になるページ:

*ASCII24 *[[ASCII24 デジタル用語辞典 ヒアドキュメント  http://yougo.ascii24.com/gh/38/003832.html|http://yougo.ascii.jp/caltar/%E3%83%92%E3%82%A2%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88]]


<[[Unix/Linux入門]]に戻る>