Batasan Blog

人類みな五十歩百歩

Windows 都市伝説

Windows11になってターミナルの話をしていたら、少し前に某巨大掲示板(と言っても5じゃなくてまだ2の時代だが笑)の都市伝説の板の話を思い出した。そこではWindowsPRNという名前のフォルダーやファイルが作れないのはビルゲイツさんがこの単語が嫌いとか、昔いじめられた人のイニシャルだったとか、まことしやかに語られていた(笑)。
Unixユーザ(当時Linuxはまだ無かった)でMS-DOSも使っていた人なら誰でも知っているとは思うのだが、もうそんな時代の技術者も少なくなったとも思うので備忘録として書いておきたい。
Unix(繰り返しだがMS-DOSの時代にはまだLinuxは無かった)のスクリプトでは普通に使われる以下のようなコマンド、

$ (いろんなコマンド) > /dev/null
$ (いろんなコマンド) > /dev/null

これはコマンドが出力する文字情報を画面に出さないと言う意味である。なぜこんなことをするかというと、スクリプトを実行するときに画面に大量の出力で大事な部分が見えなくなってしまうことがあるので、必要のない出力は抑えたいときに使う。MS-DOSは少しだけ(笑)当時のUnixをまねしているので、同じようにMS-DOS

C:\> コマンド > NUL
C:\> コマンド > NUL

とすると、コマンドの表示は画面にでないようになる。Unixと違うのはNUL予約語であって、デバイスでは無いということだ。またUnixで次のようなコマンド、

$ tty
/dev/pts/0
$ echo "Hello World" > /dev/pts/0
$ tty
/dev/pts/0
$ echo "Hello World" > /dev/pts/0

などとやると画面に直接文字列を表示できる。ttyというコマンドは自分が使っている画面の名前を出力する(出力結果は環境によって異なる)。その画面に文字を直接出力するのが2つ目のコマンドの意味だ。もしLinux環境をお持ちであれば、2つ端末を開いてそれぞれの端末名に対して書き込んでみていただきたい。簡易チャットになる(笑)。もちろんOS標準のデバイスファイルなので、/dev/pts/*のファイルの中身が"Hello World"になってしまったりはしないので(笑)安心して試していただきたい。これは接続されているデバイスが画面でなくプリンターでも同じように出力される。
同様にMS-DOSでは接続されてるプリンター予約語PRNだったので、

C:\> type autoexec.bat > PRN
C:\> type autoexec.bat > PRN

のようなコマンドを実行するとプリンターに印刷されるというわけだ。もちろんパソコンのシリアルポートに直結されているプリンターがある場合の話である。ちなみに当時パソコンの動きがおかしくなると、OSの最初に起動されるautoexec.batの内容を確認するためによくこのコマンドを実行した覚えがある(笑)。
今となってはこんなコマンドを実行する人は皆無だと思うが、MS-DOSのこうした機能の互換性を保つためにNULやPRN予約語のまま今のWindowsに引き継がれているという点に長い歴史を感じるのである(笑+遠い目)。

Windows都市伝説

Windows都市伝説