防止记录清除命令

时间:2016-12-06 20:45:34

标签: linux bash logging

假设以下简单脚本:

#!/bin/bash
log="${HOME}/bin/test.log"
if [ -r "${log}" ]; then
   rm -f "${log}"
fi
{
   echo "Start of test"
   clear
   echo "End of test"
} 2>&1 | tee -a "${log}"

生成的日志文件的内容如下所示:

Start of test
<unprintable>[H<unprintable>[2JEnd of test

有没有办法避免使用这种记录方式发出清除命令所产生的额外字符?

1 个答案:

答案 0 :(得分:1)

一种可能性就是将它们从流转到日志文件的流中过滤掉。

{
   echo "Start of test"
   clear
   echo "End of test"
} 2>&1 | tee -a >(sed 's/.\[H.\[2J//' > "${log}")

(我不确定如何仅使用可移植sed来匹配文字转义字符。这里,我只使用.匹配任何字符并假设此正则表达式仅匹配预期可以“欺骗”并使用bashsed命令中生成文字转义字符:

sed $'s/\e\\[H\e\\[2J//'

虽然因为我们已经使用bash特定的流程替换而没有作弊太多。)