我正在尝试记录交互式命令行程序的输出;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
但我并不是特别想修复现有的日志文件:我想避免创建因删除的输入和控制字符而乱码的新日志文件。
我以为我已经使用 解决了问题rlwrap
,但它与units
readline 功能冲突,因此它要么无法捕获输出,要么捕获输出但否定使用制表符完成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-Calculations