[余談その2]性格なリダイレクトの定義
なになに、TomG君、ちょっと違うんじゃないの・・・。
はいはい、実は上の説明はちょっと足りないんですが、これを正確に説明しようとすると、この講座を読んでくれている人のほとんどが逃げてしまいそうなので、おおざっぱに説明しています。
性格には、リダイレクトとは、
「標準入出力を、他のデバイスやファイルに切り替える」
ことをいいます。
[余談終わり]
リダイレクトには大きく分けて二つの種類があります。
DIR >DIR.TXT リターンキー
このようにすると、画面には何も表示されずに、プロンプトの状態に戻ってきますが、ここで次のようにして、「DIR.TXT」の内容を確認してみてください。
TYPE DIR.TXT リターンキー
どうですか?この内容は、普通に「DIR」だけを入力してリターンキーを押したときの画面表示と同じですね。
これが出力のリダイレクトです。
でも・・・これではもし万が一「DIR.TXT」がすでに存在していた場合、上書きされて元のファイルが消えてしまいます。そこで、元のファイルの後ろに、「DIR」コマンドの出力結果を追加したいときは、次のようにします。
DIR >>DIR.TXT リターンキー
このように「>>」と二つ重ねて指定すると、元のファイルが上書きされてなくなってしまうことはありません。
それから、この「>」マークの次に指定できるもので、ファイルとは違った特殊なものがあります。
PRN(プリンタ)、CON(キーボードもしくは画面)、AUX(RS232C)、NUL(ダミー)
たとえば、「DIR」の結果を、印刷したいときは、次のようにします。
★注意★WindowsのMS-DOS プロンプトでは実行しないでください。
DIR >PRN リターンキー
このようにすると、プリンタが動き出すと思いますが、環境によってはうまく動作しない可能性があります。
また、WindowsNT4以上のコマンドプロンプトでは、標準出力の他に、標準エラー出力をリダイレクトすることもできます。
標準エラー出力というのは、プログラムがエラーメッセージを出力するのに用いる標準出力とは違った出力方法です。
コマンドの後ろに「>」をつけてリダイレクトしたにもかかわらず、画面に何らかのメッセージが出る場合には、そのメッセージは標準エラー出力に出力されていることになります。
標準エラー出力をリダイレクトするためには「2」を使います。たとえば、ネットワークドライブ「W」を切断するには
net use w: /delete
としますが、このコマンドの結果をファイルに出力したければ次のようにします。net use w: /delete 2>message.txt
この例はなかなかないのですが、MS-DOSの外部コマンドに「SORT」というのがあります。このコマンドは、ほかのコマンドとはちょっと雰囲気の違うコマンドです。ためしに、次のように入力してみてください。
SORT リターンキー
あれっ?何も起こりません。しかし・・・何かが変です。
実はこのコマンドは、標準出力(キーボードなど)から読み込んだ行を、並べ替えるコマンドなのです。
今は何も入力しませんでしたので何も表示されません。Ctrl+Cキーを押すとプロンプトに戻ります。
みなさんのハードディスクの中には、先ほどの実験で作成した「DIR.TXT」があるはずですので、次のようにしてみてください。
SORT <DIR.TXT リターンキー
いかがですか?「DIR.TXT」が順番に並べられ、画面に表示されましたよね?
もし、この結果をファイルに出力したければ、
SORT <DIR.TXT >DIRSORT.TXT リターンキー
のようにします。
DIR | SORT リターンキー
これは、「DIR」コマンドの結果を、「SORT」コマンドに渡して処理してから、画面に表示しています。
また、DIRコマンドの結果が画面に収まりきれないので1画面ずつ停止してリターンキーを押すと先に進めるようにするには、DIRコマンドの結果をMOREというページャーコマンドに渡します。
dir | more リターンキー
DIR | SORT >TEST.TXT リターンキー
このようにすると、「DIR」コマンドの出力が「SORT」コマンドによって順番に並べられ、それが「TEST.TXT」へ出力されます。
パイプとリダイレクトは、ちょっと難しそうですが、覚えておくと大変便利ですので、みなさんもいろいろと実験してみてください。