将脚本输出重定向到文件时防止 tput 转义序列

将脚本输出重定向到文件时防止 tput 转义序列

我有一个 shell 函数,可以使用tput.

color=$( tput setaf 1 )
normal=$( tput sgr0 )
colorize() {
    echo "${color}$1$(normal)"
}

当我调用该函数时,终端会按预期显示彩色文件名。

$ myScript.sh .
/path/to/dir # (in color red)

然后,如果我将输出重定向到文件:

$ myScript.sh > /tmp/file.log

file.log仍然包含转义序列,例如:

^[[36m~/path/to/my/file/^[(B^[[[m

这可能与学期信息计算,以及终端如何解释转义序列?

这个想法是模拟一个“非显示”终端,不是吗?

我的术语是(Ubuntu 16.04):

$ echo $TERM
xterm

tput当我的脚本重定向到文件时,我应该怎么做才能防止出现此类转义序列?

解决方法:向我的脚本添加一个选项以手动禁用着色,如lsgrep类似--color=none

答案1

简而言之: tput 不这样做。

更长:你的脚本可以做到这一点

例如,检查标准输出是否是终端:

if [ -t 1 ]
then
    color=$( tput setaf 1 )
    normal=$( tput sgr0 )
else
    color=""
    normal=""
fi

相关内容