scriptコマンドでタイムスタンプ付与したターミナルログに対し、シェル芸で制御文字とカラーコードの削除をリアルタイムで行う
Pocket

ちょっと前に、awkを使ってscriptコマンドで取得するターミナルログにタイムスタンプを付与する(Teratermとかのログみたいにする)処理について記述したことがあったのだが、この状態だとバックスペースなどの制御文字やカラーコードが残っている状態になってしまう。catなどで見る分には問題ないのだが、lessなどで確認するにはちょっとよろしくないよねということで、そういった制御文字やカラーコードを記録中に削除してしまうことにする。

Sponsored Links

で、よく制御文字を削除する方法としてはcolコマンドが用いられるのだが、この方法だとファイルを読み込んで削除はできても追記での削除はできないようだ。
なので、ちょっと汚いけどtrやsedで削除していく。

script -fq >(awk '{print strftime("%F %T ") $0}{fflush() }' | sed "s,\x1B\[[0-9;]*[a-zA-Z],,g" | tr -d '\000-\011\013\014\016-\037]0;' >> test_$(date +%Y%m%d_%H%M%S).log)

 

これで、記録されるログからは制御文字やカラーコードが削除されているはずだ。
…ただ、バックスペースとか上下キーでのhistory選択を行った際の特殊文字も全部消えてるので、これだと実行したコマンドが結局何だったのかが読みにくいかも。vimでファイル編集した際の内容がうまいこと記録されるのは良いけど、使いどころ次第だろうか。

 

Pocket

Written by blacknon

インフラ系のSE。一時期はプログラマ。 仮想化とオープンソースに興味あり。一日中寝てたい今日このごろ。 スペインとかで働きたいなぁ…(シエスタがあるので)

Leave a Comment

メールアドレスが公開されることはありません。

*