为了完整起见,包含所有这些转义序列的文件由bootlogd守护程序(debian 系列中的引导日志包)生成,该守护程序捕获引导期间发送到控制台的所有彩色消息。在控制台上,这些消息首先显示如下:
[....] Starting periodic command scheduler: cron
然后,当执行服务或命令时,转义序列被发送到控制台以将光标重新定位在行首并打印ok、fail、info、warn等...
[ ok ] Starting periodic command scheduler: cron.
所有这些消息都被bootlogd守护进程捕获并写入一个包含所有转义序列(包括重新定位序列)的文件。没有问题,除了^[
必须用八进制替换033
才能正确显示文件。但是,因为有一个捕获,守护程序还在消息前面添加一个日期戳,而不改变光标重新定位序列的坐标。因此,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 等......