我有一个 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
当我的脚本重定向到文件时,我应该怎么做才能防止出现此类转义序列?
解决方法:向我的脚本添加一个选项以手动禁用着色,如ls
或grep
类似--color=none
。
答案1
简而言之: tput 不这样做。
更长:你的脚本可以做到这一点
例如,检查标准输出是否是终端:
if [ -t 1 ]
then
color=$( tput setaf 1 )
normal=$( tput sgr0 )
else
color=""
normal=""
fi