我有一个 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
这可能与TERM和infocomp以及终端如何解释转义序列有关吗?
这个想法是模拟一个“非显示”终端,不是吗?
我的术语是(Ubuntu 16.04):
$ echo $TERM
xterm
tput
当我的脚本被重定向到文件时,我应该怎么做才能防止这种转义序列?
解决方法:在我的脚本中添加一个选项以手动禁用着色ls
,grep
如--color=none
.
简而言之: tput 不会那样做。
更长:您的脚本可以做到这一点
例如,检查标准输出是否为终端: