执行时保留颜色代码

时间:2015-03-31 17:54:30

标签: 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()

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

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

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

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

1 个答案:

答案 0 :(得分:5)

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

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

您可以使用grep标记强制--color=always输出颜色。