执行时保留颜色代码

Beh*_*ree 1 bash colors go

作为更大程序的一部分,我正在调用grep,并将其结果输出到标准输出:

// execute grep command
cmd := exec.Command(GREP_BIN_PATH, argArray...)
stdout, err := cmd.StdoutPipe()
if err != nil {
    log.Fatal(err)
}
stderr, err := cmd.StderrPipe()
if err != nil {
    log.Fatal(err)
}

err = cmd.Start()
if err != nil {
    log.Fatal(err)
}
go io.Copy(os.Stdout, stdout)
go io.Copy(os.Stderr, stderr)
cmd.Wait()
Run Code Online (Sandbox Code Playgroud)

如果我直接从终端对grep进行相同的调用,则grep输出多色文本(例如,在其输出中以任何匹配的红色突出显示).做一点研究,似乎grep /其他程序使用特殊的ansi颜色代码来改变颜色突出显示.

当我执行命令时,这些颜色在哪里?有什么方法我可以从内部执行以保留ansi颜色代码,只是将输出从grep复制到标准输出(类似于此处的帖子,但是为了go)?

(我也知道我可以手动重新插入颜色代码.但这看起来很痛苦,我宁愿只管道grep的原始颜色.)

如果问题中的某些内容不清楚/需要澄清,请告诉我.谢谢!

Eta*_*ner 5

grep 大多数其他颜色使用工具在他们决定是否使用颜色时检测他们是否正在向终端发送输出.

文件和管道等通常不需要颜色代码,也不知道如何处理它们.

尽管如此,您仍可以强制grep输出颜色--color=always.