假设以下简单脚本:
#!/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
有没有办法避免使用这种记录方式发出清除命令所产生的额外字符?
答案 0 :(得分:1)
一种可能性就是将它们从流转到日志文件的流中过滤掉。
{
echo "Start of test"
clear
echo "End of test"
} 2>&1 | tee -a >(sed 's/.\[H.\[2J//' > "${log}")
(我不确定如何仅使用可移植sed
来匹配文字转义字符。这里,我只使用.
匹配任何字符并假设此正则表达式仅匹配预期可以“欺骗”并使用bash
在sed
命令中生成文字转义字符:
sed $'s/\e\\[H\e\\[2J//'
虽然因为我们已经使用bash
特定的流程替换而没有作弊太多。)