対話型コマンドラインプログラムの出力を記録しようとしています。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
Perlスクリプトは次のとおりです。
http://log.guidoderosa.net/2009/05/another-old-post-which-may-be-useful.html
しかし、私は特に既存のログファイルを変更したくありません。削除された入力および制御文字で歪んだ新しいログファイルを生成しないようにしたいと思います。
readlineを使用して問題を解決したと思いましたが、readline機能と競合して出力をキャプチャできないか、出力をキャプチャしますが、rlwrap
タブunits
補完rlwrap -a
機能を無効にします。役に立ちません。これはマニュアルページでよく説明されています:units
rlwrap -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-計算