Tcl/Tk 日志文件在由 Jenkins 作业调用时有许多 ^H 字符



我有一个Tcl/Tk期望脚本,日志信息被记录到外部日志文件中。

我可以在Linux服务器上成功执行它,没有任何错误,并且日志文件没有任何奇怪的^H。但是当脚本被 Jenkins job 调用时,在同一台 Linux 服务器上运行。日志文件会有很多^H,并且期望会超时。

可能的原因是什么?

^H实际上是退格字符 U+000008,它在终端(和终端仿真器)中用于将当前字符插入位置向左移动一个位置。这反过来用于模拟各种效果,例如使字符加粗(通过双击)或为其添加下划线(通过在同一单元格上放置_)。想想它要去传统的电传打字机,它将东西打印到同一个位置两次。这绝对是宿醉旧日。

似乎 Jenkins(或者不管它叫什么,很可能是 maven,尽管绝对不一定!)正在使用该设备来备份它所写的内容,以便它可以在那里写入一个新值,可能是像一个简单的下载进度表。写入他们认为是终端的东西有时会这样做。你只需要应付。Expect 正则表达式中的b将匹配它,尽管这样做可能是不明智的,因为被覆盖的任何内容都是瞬态信息。如果字符正在写入文件,则可以使用col程序(nroff/groff套件的一部分)来剥离它们;这可能更容易。

请注意,软件还有其他方法可以实现相同的效果,例如只编写回车符(将光标放回当前行的开头)。