前説 - ログのエスケープシーケンスが邪魔 -
IT土方SE的なお仕事では、証跡が大事だとよく言われます。
GUIのWindowsならスクショ、Linuxならログですね。
Linuxでは多くの場合、Tera Termが使われますが、コマンドライン上でタイプミスを修正したりすると、ログにエスケープシーケンスが混じります。
Tera Termの場合、ログにエスケープシーケンスを除外する設定もできますが、最終的なコマンドラインとは異なる結果になってしまいます。
これはエスケープシーケンス除外処理がVT100の振る舞いに従っていないためであり、Tera Termに限らず多くのエスケープシーケンス除外処理を謳うプログラムやスクリプトはこのような結果になってしまいます。
tmux でエスケープシーケンスを除去するシェルスクリプト
そこで、古くはGNU screen、近年ではtmuxのスクロールバッファ機能を用いて、ログのエスケープシーケンス除外処理を行う、という内容が僅かにwebで見受けられます。
しかし、具体的にどうするのか、あまり詳細に記述されたweb文書が見当たりませんでした。
仕方なく、私なりに以下のように書いてみました。
$ cat ~/bin/tmclog.sh
#!/bin/bash
if [ -e $1 ] && [ "$1" != "" ] ; then
clear
tmux clear-history
cat $1
tmux capture-pane -pS - > /tmp/hoge
else
echo "File not found."
exit 1
fi
使い方
先ず、tmuxを実行し、新たなセッションを作成します。
次に、tmuxのセッション上で、上記シェルスクリプトを実行します。
以下はユーザホームディレクトリ配下に ~/bin/ ディレクトリを作成し、そこに上記シェルスクリプトを配置し、 $PATH を通している例です。
$ tmclog.sh [full-path-of-logfile]
こうすると、 /tmp/hoge という、エスケープシーケンス除外処理を施されたログファイルが出来上がります。
Tera Termだけでなく、 script コマンドによるログファイルも同様に処理できます。
要はVT100エスケープシーケンスが含まれるログなら何でもOKです。
但し、文字コードはUTF-8限定です。(今更SJISってないっしょ。え?PowerShell?)
Linux, bash限定です。
Ubuntuで動作を確認していますが、 RedHat系でも実行できると思います。
*BSD系でもできるかも?Mac持ってないんでわかりません。
ここで力尽きました
とは言えども、出力が常に /tmp/hoge じゃあ芸がないですね。
で、出力をもう少し実用的に、なんて考えては見たんですが、
- ユーザの趣味趣向によってあらゆるケースが考えられる
- 出力先次第ではパーミッションやセキュリティを考えなければならない場合がある
- そうなるととてもシェルスクリプトでは賄いきれず、今の私のスキルじゃ対応できない
ので、一旦諦めることとしました。
皆様の手でシェルスクリプトやpython等で便利に改造しちゃってください。