script
私はこのようなことができたらと思います。
❯ script --user=call.log --prog=response.log
Script started
❯ echo foo
foo
❯ exit
Script done
❯ cat call.log
echo foo
❯ cat response.log
foo
そうではなく、代替案を探しています。
実際の出力を見ると、script
次のようになります。
^M^[[35m❯ ^[[Ke^Hecho foo#[[?1l^[>^?2004l^M^M
^[]0;tmp: echo foo^Gfoo^M
私が欲しいものを抽出するためにパーサーを書くことを検討しました。しかし、これは特にユーザーのシェル構成に依存しているように見えるため、脆弱に見えます。
セッションの開始と終了を別々に記録するより良い方法はありますか?
答え1
さまざまなアプリケーションの内部を理解していないと、端末ドライバ(アプリケーションの代わりに)がどの文字を反転しているのか、どの文字が特定のアプリケーションから出力されるのかはわかりません。
私は使うscript
出力キャプチャコマンドラインあなたの例のようなアプリケーションを作成し、スクリプトを使用してエスケープシーケンスをフィルタリングします(例:Unixユーティリティを使用してプログラムでANSI制御コードをファイルに「書き込み」できますか?)。
これは、エディタなどのフルスクリーンアプリケーションでは正しく機能しません。これは、カーソルが画面を横切って移動してテキストを更新するときに何が起こるのかを明確に示していないからです。この目的のために、(通常)セッションをスローモーションで再生するだけで十分です(例:slowcat
)。