パイプ
今回で最後の講座です。前回のリダイレクトは理解できましたか?
Windowsしか使わない人には理解しづらかったかもしれませんが、リダイレクトをマスターすればDOSによる強力なパソコン操作が見えてきます。データをファイルとして別に保存しておき、自由に加工できるようになるのです。
そして、今回はWindowsにできなくて、DOSだけができる究極の技法になります。リダイレクトの親戚のようなものなのですが、パイプという考え方です。前出の図を再掲します。
キーボード >>---+ +--->> CRT
| |
ファイル >---+---> 標準入力 標準出力 ---+---> ファイル
| (stdin) (stdout) |
RS-232C >---+ +---> RS-232C
※標準入力がキーボードで標準出力がCRTの場合(打った文字が画面に出る)。
この図をじっと見ていると標準入力と標準出力が何か関係があって繋がるような感じがしませんか。実は、標準入出力を繋げているものがプログラムなのです。
+--+
キーボード >>---+ |プ| +--->> CRT
| |ロ| |
ファイル >---+---> 標準入力 ---|グ|--- 標準出力 ---+---> ファイル
| (stdin) |ラ| (stdout) |
RS-232C >---+ |ム| +---> RS-232C
+--+
typeを使ったstdinとstdoutの接続
図と照らし合わせてみてください。typeコマンド(プログラム)はファイルからの入力をCRT(画面)に出しているに過ぎません。
+--+
キーボード >---+ |T| +--->> CRT
| |Y| |
ファイル >>---+---> 標準入力 ---|P|--- 標準出力 ---+---> ファイル
| (stdin) |E| (stdout) |
RS-232C >---+ | | +---> RS-232C
+--+
dirを使ったstdinとstdoutの接続
dirコマンド(プログラム)は通常はCRT(画面)に出力するようになっているのですが、それを繋ぎ変える指令としてリダイレクト記号「>」を使用して、ファイルに出力させたのです。
+--+
キーボード >---+ | | +--->> CRT
| |D| |
ファイル >>---+---> 標準入力 ---|I|--- 標準出力 ---+---> ファイル
| (stdin) |R| (stdout) |
RS-232C >---+ | | +---> RS-232C
+--+
[ リダイレクトしたDIRコマンドの場合(ディレクトリの内容がファイルに) ]
+--+
キーボード >---+ | | +---> CRT
| |D| |
ファイル >>---+---> 標準入力 ---|I|--- 標準出力 ---+--->> ファイル
| (stdin) |R| (stdout) |
RS-232C >---+ | | +---> RS-232C
+--+
このように、パイプはプログラムとプログラム間で標準入出力を結合します。
実際にパイプを試してみよう
さて、ここでechoコマンドを紹介しますね。echoは読んで字の如くエコーです。実際にやってみたほうが理解が早いですね。DOSを起動して、\foobarディレクトリに移動してください。その後、「echo hello」とコマンド投入してみてください(echoとhelloの間は半角スペース)。
hello
画面にhelloと表示されましたね。分かりましたか?このechoコマンドはechoの後に続けて書いた文字を画面に出力するだけのコマンドなのです。これを図と照らし合わせるとキーボードからの入力をechoコマンド(プログラム)がCRT(画面)に出力していると捉えることができます。
ここで、dateコマンドを思い出してください。dateをコマンド投入すると変更する日付をキーボードで入力できる仕様でしたね。ピンときましたか?
この二つのコマンドを繋げることができたら、echoコマンドの文字をdateコマンドに引き渡すことができますね。わざわざ日付ファイルを作ってリダイレクトする必要がなくなります。
さっそく試してみましょう。まず、dateで日付を確認します。
現在の日付は 20**-**-** (**) (**のところは日によって異なる)
日付を入力してください(年-月-日): <-- エンターキーを押してください
それでは、echoとdateを繋いで、過去の1999-12-31に日付を戻すことにしましょう。コマンド(プログラム)同士を繋ぐための記号は「|」です。パイプ(縦棒)ですね。それでは、以下のコマンドを投入してください。
現在の日付は 2004-04-04 (日)
日付を入力してください(年-月-日): 1999-12-31
どうですか?自動的にechoコマンドで指定した1999-12-31がdateに引き渡されて、日付設定されていますね。
パイプを使えるプログラムは協力し合える
全てのコマンド(プログラム)が標準入出力を有効に使えるように設計されている訳ではないのですが、きちんとした設計思想のあるプログラムならリダイレクトやパイプを使って、データがプログラムを渡り歩けるようになっているはずです。
UNIXを大いに参考にして作られたはずのDOSが、Windowsになって忘れてしまったもの。それは役割を明確に決められたプログラム同士が標準入出力を通してデータをやり取りしあうスタイルだったのです。
最後に、皆さんのコンピュータの日付を今日に戻しておいてください。WindowsのGUIを使ってもいいですが、ここまで読んだ方なら
ですね。
この後は…
DOS入門を最後まで読んで頂きありがとうございます。本ウェブサイトのメインテーマである逆ポーランド電卓「rpn」はDOSと親和性が高く、標準入出力を存分に使えるように設計してあります。
よろしかったら、rpn基礎やrpn入門を閲覧してみてください。逆ポーランド電卓「rpn」を簡単に学ぶことができます。一旦、rpnの使い方に慣れてしまえば、電卓の世界を超えた大きな世界が広がることでしょう。