我有一个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中看到颜色,但在重定向输出时会跳过它们.
怎么做?
如果使用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)
应该这样做.