bash彩色文字和管道

Jak*_* M. 3 bash perl

我有一个Perl脚本,在bash下输出一些彩色文本.例如,这将输出一个红色字符串:

perl -e 'print "\e[1;31m RED \e[m"
Run Code Online (Sandbox Code Playgroud)

当我把它管道到另一个程序,例如vim时... | vim -,我可以看到颜色形成杂乱的字符:

^[[1;31m RED ^[[m
Run Code Online (Sandbox Code Playgroud)

我希望他们被跳过.例如grep,您在bash中看到颜色,但在重定向输出时会跳过它们.

怎么做?

Sin*_*nür 6

如果使用Term :: ANSIColor生成转义序列,则可以设置ANSI_COLORS_DISABLED环境变量以禁用转义序列生成.

您可以使用-t文件测试来确定输出是否为tty(或检测脚本是否以交互方式运行).

然后,在输出任何序列之前,在Perl脚本中设置环境变量.

就像是:

use IO::Interactive;

BEGIN { is_interactive() or $ENV{ANSI_COLORS_DISABLED} = 1 }
Run Code Online (Sandbox Code Playgroud)

应该这样做.