なぜDOSでは copy con ファイル名 なのか
unixで cat > foo.txt ってやっている感覚からすると、
DOSの場合なら、type > foo.txt とするのが自然な気がするのになんでやらないんだろう?と思ったので。
これはすぐに解決。
C:\> type > foo.txt コマンドの構文が誤っています。 C:\>type /? テキスト ファイルまたはファイルの内容を表示します。 TYPE [ドライブ:][パス]ファイル名 C:\> type con > foo.txt bar ^Z
そもそもtypeコマンドでは、引数のファイル名は省略できない。
つまりcatコマンドのように、引数を省略すると標準入力を使用する、という機能がなかった。
なので、ファイル名として明示的にconを与えてやると動く。
こうなると次の疑問がわく。
なぜtypeコマンドではなくcopyコマンドなのか
「COPY FILE AUX」で送信されたテキストファイルを「COPY AUX FILE」で
受信するためには、ファイルの末尾に^Z=$1Aが付いている必要があります。
これは$1Aがないと受信側のCOPYコマンドが終了しないからです。
(「TYPE FILE > AUX」で送信すると$1Aが欠落するのでうまくいきません)^Z は MS-DOS よりも昔の DOS である CP/M で、ファイルの終わりを示し
http://www.geocities.jp/m_hiroi/gbook1.html
ていたのですが、今の OS では必要ありません。
念のため実際に、type con > type.txt と copy con copy.txt をやってみたが、
どっちのファイルにも^Zは入ってなかった。(WindowsXPにおいて)
今となってはどっちでもいいけど、歴史的経緯によりcopyを使う方の作法が
慣例になったってところなのかな。
あるいは、どうせconが省略できないならcopyを使う方がタイプ数が少ないから、とか。