我有一个包含颜色代码的文件:
Fri May 25 17:13:04 2012: [....] Starting MTA: exim4^[[?25l^[[?1c^[7^[[1G[^[[32m ok ^[[39;49m^[8^[[?25h^[[?0c. Fri May 25 17:13:05 2012: [....] Loading cpufreq kernel modules...^[[?25l^[[?1c^[7^[[1G[^[[32m ok ^[[39;49m^[8^[[?25h^[[?0cdone (acpi-cpufreq).
如何在linux终端上显示它着色?
解决方法
为了完整起见,包含所有这些转义序列的文件由bootlogd守护程序(debian系列中的bootlog软件包)生成,它捕获在引导过程中发送到控制台的所有彩色消息.在控制台上,这些消息首先显示如下:
[....] Starting periodic command scheduler: cron
那么当执行服务或命令时,将转发序列发送到控制台,以将光标重新定位在行的开头,并打印ok,fail,info,warn等…
[ ok ] Starting periodic command scheduler: cron.
所有这些消息都由bootlogd守护程序捕获,并写入具有所有转义序列的文件,包括重定位序列.没有问题,除了^ [必须被八进制033替换为正确显示文件.但是,因为有一个catch,守护进程还会在消息前添加一个日期戳,而不会改变光标重新定位顺序的坐标.因此,ok,fail等消息覆盖部分日期戳.不太好.
Fri May 25 17:13:01 2012: [....] Starting periodic command scheduler: cron becomes... [ ok ay 25 17:13:01 2012: [....] Starting periodic command scheduler: cron.
解决办法是改变光标定位顺序.通过尝试和错误我发现序列是^ [1G.以下sed命令终于完成了工作:
sed 's/\^\[/\o33/g;s/\[1G\[/\[27G\[/' /var/log/boot
在将控制台消息发送到文件之前,bootlogd守护程序应清除所有转义序列.我们可以称之为错误吗?
所有的Debian继承人,如Ubuntu,Mint等,也可能会出现这个“bug”