標準入出力・リダイレクト・パイプ
標準入出力
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などのコマンドを操作するときによく使う。
Keyword(s):
References:[2018_実用解析] [Unix/Linux入門]