また実行形式ファイルを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
)なので、それを取り除きます。
こうすることで、実行形式ファイルだけでなく、圧縮ファイルなどに含まれる問題のある文字列にも対処することができるようになりました。