cat a.out を防ぐ(その2)

また実行形式ファイルをcatしてしまってコンソールが大変なことになったので、対策を強化しました。

今回はa.outという名前ではなかったので、前回(cat a.out を防ぐ - よーる)の対策が働きませんでした。

どういう文字列がコンソールを破壊するのかを調べてみると、[ESC]cという文字列が原因のようです(こんなに短い文字列で発生すると思っていませんでした。実行ファイルをcatするとほぼ毎回、コンソールが大変なことになるのは、標準ライブラリ由来の文字列が原因だと思っていました)。 参考:ANSI escape code - Wikipedia いろいろ実験してみると、[ESC]cの間に印字可能文字でないものが挟まっていても同様の動作をするようです。

cat a.outだけに対処するのではなく、根本的にこういった問題に対処するため、.catを以下のように変更しました。

cat $args | sed "s/\x1b//g"

コンソールが壊れる原因は[ESC]0x1b)なので、それを取り除きます。 こうすることで、実行形式ファイルだけでなく、圧縮ファイルなどに含まれる問題のある文字列にも対処することができるようになりました。