メモの日々


2016年04月12日(火) [長年日記]

[unix] エスケープシーケンスを綺麗に除去できない

scriptコマンドで作業の記録を取ろうとしたのだけれど、エスケープシーケンスまで記録されてしまうのが不便。

エスケープシーケンスを除去する丁度良いコマンドってなかなか無いみたい。検索すると colコマンドを使ったりsedで何とかしている例がヒットするけど、自分の環境だとどれもゴミが残る。

エスケープシーケンスについてちゃんと調べれば自分で除去スクリプトを書けると思うけど、今は調べたくない!

[unix][howto] tmuxでペインの内容をファイルに出力する

scriptコマンドが使えないので別解を探す。tmuxに使える機能があるのではないか。

検索すると pipe-pane コマンドを使う例がよく出てくるが、これもエスケープシーケンスまで記録してしまうようである。

少し不便だけれど、 capture-pane コマンドを使えばエスケープシーケンスなしに実行コマンドの内容をファイルに出力できた。ただし、scriptコマンドとは違い、実行済みの結果をキャプチャすることになる。tmux上で次を実行する。

% tmux capture-pane -p -S -1000 > sample.txt
  • -pオプションを指定することでキャプチャ結果が標準出力に出力される。省略するとtmuxのバッファに出力される。
  • -Sオプションでキャプチャ対象の先頭位置を指定する。-1000だとアクティブなペインに今表示されている一番上の行から1000行遡った行から下がキャプチャされる。省略するとペインに今表示されている部分だけがキャプチャされるみたい。

先頭位置を指定しないといけない所が不便。多めにキャプチャして不要な部分を後から削除するしかない。

もっとましな方法ないのかなあ。

本日のツッコミ(全2件) [ツッコミを入れる]
宮川 拓 (2016年04月13日(水) 10:44)

scriptとtmuxの組み合わせで行けそうな気がします。<br><br>1. tmuxで新しいペインを作って、先頭でscriptのログを再生:<br>cat path/to/typescript<br><br>2. tmuxでテキストのログを取る:<br>tmux capture-pane -p -S -99999 > sample.txt<br><br>3. sample.txt先頭の「cat path/to/typescript」を除去<br><br>tmuxを使っておらず確認できていないのですが(すみません)、GNU screenではこれでテキストのログが取れます。

小川 (2016年04月13日(水) 14:12)

ありがとうございます。tmuxでもうまく動きました。