bash 会话日志文件中存在垃圾。 (使用脚本命令)

bash 会话日志文件中存在垃圾。 (使用脚本命令)

我尝试使用以下命令记录 bash 会话:

js:/var/tmp # script -aqf /var/tmp/out

out文件中,除了输出之外,我还看到很多垃圾。我看到的不仅仅是空格和换行,例如:

Script started on Tue Jul 14 14:17:57 2015
^[[?1034h^[[1m^[[31mjs-om:/var/tmp # ^[(B^[[m^M
^[[1m^[[31mjs:/var/tmp # ^[(B^[[m^M
^[[1m^[[31mjs:/var/tmp # ^[(B^[[m^M
^[[1m^[[31mjs:/var/tmp # ^[(B^[[m^M
^[[1m^[[31mjs:/var/tmp # ^[(B^[[m^M
^[[1m^[[31mjs:/var/tmp # ^[(B^[[mpwd^M
/var/tmp^M
^[[1m^[[31mjs:/var/tmp # ^[(B^[[m^M
^[[1m^[[31mjs:/var/tmp # ^[(B^[[m^M
^[[1m^[[31mjs:/var/tmp # ^[(B^[[m^M
^[[1m^[[31mjs:/var/tmp # ^[(B^[[m^M
^[[1m^[[31mjs:/var/tmp # ^[(B^[[mexit^M
exit^M

我认为问题出在编码上。这个问题有解决办法吗?

答案1

不,问题不在于编码。您似乎没有遵循手册页中提到的屏幕先决条件:

 Certain interactive commands, such as vi(1), create garbage in the type‐
 script file.  Script works best with commands that do not manipulate the
 screen, the results are meant to emulate a hardcopy terminal.

您拥有可能由复杂提示产生的各种内容。设置您的提示

PS1="$ " 

以防止写入垃圾。

答案2

除了修复您的 之外PS1,您还可以通过在TERM环境变量中导出合适的值来说服应用程序不要发出这些非打印字符。规范的可能是export TERM=dumb在会话开始时script(或TERM=dumb script <args>调用时)。假设您PS1使用 来创建可移植的tput,那么后者也可能适用于该目的。

答案3

从脚本输出中删除控制字符(包括控制台代码/颜色)似乎回答了你的问题。

首先,在清除所有转义序列的打字稿文件后使用 script + 。

相关内容