Ctrl-Zで終わるファイルをWindows7のtypeコマンドに食わせるとどうなるか実験してみた

Linuxのcatと同じだから…
と、バイナリファイルをtypeコマンドを使ってリダイレクトしようとすると、こんな落とし穴に遭遇することがあります。

この画像がすべてを物語っています。

WIndowsのtypeコマンドで^Zで終わるファイルを追加するとこうなる

WIndowsのtypeコマンドで^Zで終わるファイルを追加するとこうなる

中央と終端にCtrl-Z(EOF、16進で1A)の入ったctrl-z-test.txtというファイルをバイナリエディタで作ってみます。さて、これをtypeコマンドで表示させるとどうなるでしょう?

中央のCtrl-Zを「ファイルの終わり = End Of File」と勘違いしてしまい、そこまでしか表示してくれません。

しかし、別のファイルに新規作成モードでリダイレクトして保存してみたところ、中央のCtrl-Zも終端のCtrl-Zも保存されました。

そうか、リダイレクトなら、バイナリファイルを扱っても大丈夫なんだ…
と思いがちですが、実はここが落とし穴。
追加でリダイレクトしてみると…

なんと、1回目のリダイレクトで終端についていたはずのCtrl-Zが、2回目のリダイレクトで上書きされてしまいました!

バイナリファイルをtypeコマンドで追加リダイレクトして結合しようとして、たまたまCtrl-Z(16進:1A)で終わっているファイルがあったりすると、気づかぬうちにこの落とし穴にはまる場合があるので要注意です。

typeコマンドはやっぱりテキストファイル用みたいですね…

くそー!
copyコマンドみたいな/bオプションがあるといいのに…! -_-;
Windowsのダメなところの一つです。Windows 7 の時代になってもまだCtrl-ZをEOF扱いしてるとか、時代遅れですよね…。Linuxだとそんなことないのに…。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です