gpt4 book ai didi

perl - 如何在不丢失颜色的情况下从 Perl 中的终端进行管道传输?

转载 作者:行者123 更新时间:2023-11-29 09:17:50 32 4
gpt4 key购买 nike

我正在尝试编写一个 perl 脚本,它获取 colorgcc(或任何其他将彩色文本打印到终端的脚本)的输出,添加/删除部分字符串,然后以 相同的方式打印结果 颜色作为输入字符串。

以下代码将在 color_producing_script 生成的每一行前面打印“Hello World”。输出将是全黑的,而输入是彩色的。如何修改此脚本以保留原始颜色?

open(CMD, "color_producing_script |");

while(<CMD>) {
print 'Hello World' . $_;
}

我正在使用 bash 终端。

编辑

根据第一条出色的评论,这本身不是 Perl 问题。只需运行 color_producing_script | cat 去除颜色。所以这个问题可以改写为“你如何通过管道强制颜色?”

编辑2

最新版本的 gcc (1.3.2) 似乎在 if 子句中包含了 CGCC_FORCE_COLOR 环境变量,如果定义了它,colorgcc 会强制使用颜色:

export CGCC_FORCE_COLOR=true

最佳答案

color_producing_script 在管道中使用时会改变它的行为吗?尝试

color_producing_script | cat

在命令行。它可能有一个选项来强制输出颜色,即使它是。

Perl 脚本 colorgcc 专门检查输出是否为非 tty,如果是,则跳过着色。

# Get the terminal type. 
$terminal = $ENV{"TERM"} || "dumb";

# If it's in the list of terminal types not to color, or if
# we're writing to something that's not a tty, don't do color.
if (! -t STDOUT || $nocolor{$terminal})
{
exec $compiler, @ARGV
or die("Couldn't exec");
}

编辑:

您可以通过以下一种或多种方式修改脚本:

  • 注释掉测试并让它始终产生彩色输出
  • 添加功能以支持读取设置是否着色的环境变量
  • ~/.colorgccrc 配置文件中添加支持 color-always 选项的功能
  • 添加功能以支持在将其余选项传递给编译器之前删除的始终显示颜色的命令行选项

您还可以使用 expect脚本 unbuffer像这样创建一个伪终端:

unbuffer gcc file.c | cat

(其中 cat 是一个标准收件人)。

所有这些都基于从命令行使用 colorgcc。在 Perl 脚本中应该有类似的东西来做类似的事情。

关于perl - 如何在不丢失颜色的情况下从 Perl 中的终端进行管道传输?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5073081/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com