1

script(1)対話型端末セッションの記録を保持するためのツールです。デフォルトでは、ファイルに書き込みますtranscript。私の問題は、ksh93readline 機能を備えた を使用しているため、トランスクリプトがあらゆる種類の端末エスケープ シーケンスでごちゃごちゃになってしまい、実際に実行されたコマンドを再構築することが非常に困難になる可能性があることです。迷子などは言うまでもありません^M

scriptによって書かれたトランスクリプトファイルを読み取り、すべてのジャンクを削除し、シェルが実行していると考えていたものを再構築するツールを探しているので、表示されるものと$PS1実際に実行されたコマンドがあります。それができない場合は、そのようなツールを作成する方法についての提案を探しています。理想的には、terminfo データベースの知識を使用するか、そうでない場合は ANSI エスケープ シーケンスを使用するだけです。

本当に機能する限り、シェルの履歴を参照するチートも許容されます。

4

2 に答える 2

0

デフォルトでは、トランスクリプトをブラウズするために cat/more は機能しませんか? 実際に実行されたコマンドからスクリプトを作成するつもりですか (私の経験では危険です)?

とにかく、3年間答えがないので、不完全な解決策で試してみます. 実際に入力されたコマンドだけに関心がある場合は、印刷できない文字を削除してから、PS1' を読み取り可能で一意のものに置き換え、その一意の文字列を grep します。このような:

$ sed -i 's/[^[:print:]]//g' transcript

$ sed 's/]0;cartman@southpark: ~cartman@southpark:~/CARTMAN/g' transcript | grep CARTMAN

説明: 最初の sed の後、PS1' はトランスクリプト ファイルの最初の数行の 1 つからそのまま取得できます -- PS1' は PS1 とは異なります -- 一意の読み取り可能な文字列 (ここでは「CARTMAN」) で変更できます。 . プロンプトの最後のドル記号が意図的に省略されていることに注意してください。

私が試したいくつかの例では、これですべてが解決したわけではありませんが、ほとんどの問題は解決しました。

于 2012-06-20T22:10:50.920 に答える
0

これは基本的に、 unix utils を使用してプログラムで ANSI 制御コードをファイルに「書き込む」ことができますか?で最近尋ねられた質問と同じです。-- 非表示文字をすべて削除しても修正されません

  • 埋め込まれたエスケープ シーケンス
  • 下線のためのバックスペース/オーバーストライク
  • 重ね打ちのための改行の使用
于 2015-02-25T21:51:44.783 に答える