とらりもんHOME  Index  Search  Changes  Login

標準入出力・リダイレクト・パイプ

作成者

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

標準入出力

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などのコマンドを操作するときによく使う。

Last modified:2012/05/11 18:10:47
Keyword(s):
References:[2018_実用解析] [Unix/Linux入門]