我有一个 cron 作业,它运行一个长脚本,产生大量输出。一些输出是由单个回车符分隔的行;当从命令行运行时,这些会使连续的行相互覆盖,提供进度输出,而不会过度污染反向滚动。但是,当查看 cron 作业的输出时,我希望看到所有这些行而不遗漏任何行。
直到最近,当我mailx
从 cronjob 打印输出报告时,它会用反相视频替换控制字符以^M
突出显示它们。这是我想要的行为,因为它使所有线条都可见。然而现在,一些未知的事情发生了变化(版本升级?),并按mailx
原样打印控制字符,导致它们在打印邮件时相互覆盖。我怎样才能逆转这种行为并mailx
再次替换控制字符?
答案1
tr
您可以在进一步处理或发送输出之前通过管道传输输出。
./your-script | tr "\r" "\n" | mail
这应该用换行符替换所有回车符。
在 crontab 中也可以实现同样的效果:
* * * * 2 /path/to/your-script --args | tr "\r" "\n"
答案2
原来问题出在mailx
寻呼机设置上。它more
由于某种原因开始使用,而之前它已经使用过less
(这会进行转义)。more
再次链接less
恢复了旧的行为。