入力されたすべての入力および制御文字をキャプチャせずにインタラクティブな入出力ロギング

入力されたすべての入力および制御文字をキャプチャせずにインタラクティブな入出力ロギング

対話型コマンドラインプログラムの出力を記録しようとしています。units、具体的に。

私はtee 次のように使ってみました。

units | tee units.log

または次のスクリプト:

script -c units units.log

ただし、どちらも次のように、すべてのバックスペースとタブの完成を特殊文字として記録します。

You have: 55 horsepower ^G/^H^[[K^M
You want: wat^Gt ^M
    * 41013.493^M
    / 2.438222e-05^M

マンページにscriptこの問題が記載されています。

間違い

スクリプトは、改行やバックスペースを含むすべてをログファイルに入れます。これは素朴なユーザーが期待するものではありません。

以下の説明に従って、エスケープ文字を使用またはcat削除してmoreファイルを表示する方法を知っています。col

https://stackoverflow.com/questions/7152339/format-output-from-unix-script-command-remove-backspaces-linefeeds-and-delet

Perlスクリプトは次のとおりです。

http://log.guidoderosa.net/2009/05/another-old-post-which-may-be-useful.html

しかし、私は特に既存のログファイルを変更したくありません。削除された入力および制御文字で歪んだ新しいログファイルを生成しないようにしたいと思います。

readlineを使用して問題を解決したと思いましたが、readline機能と競合して出力をキャプチャできないか、出力をキャプチャしますが、rlwrapタブunits補完rlwrap -a機能を無効にします。役に立ちません。これはマニュアルページでよく説明されています:unitsrlwrap -a -N

バグと制限事項

rlwrapは柔軟で、製品(readline機能)を伝え、Unixの「多くの小さなツール」パラダイムに従いますが、これはパッチワークです。命令の内部状態について何も学ぶことができないので、状況に合った完成は不可能です。コマンドでreadlineライブラリを使用することはまだ最善の選択です。

既存の機能を妨げることなくインタラクティブな入出力をきれいに記録する方法はありますかreadline

アップデート:似たようなものがあればいいです。

units | col -b | tee units.log

ただし、インタラクティブ入力を待っている間は中断されます。この問題は解決できますか?

ベストアンサー1

GNU Unitsは最近、バージョン2.10にこの機能を追加しました。

この--logオプションを使用すると、計算結果をファイルに保存できます。これは、ジョブを永久に記録する必要がある場合に便利です。

https://www.gnu.org/software/units/manual/units.html#Logging-計算

おすすめ記事