作为一个更大程序的一部分,我正在调用 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 会输出多色文本(例如,以红色突出显示其输出中的任何匹配项)。做一点研究,似乎有特殊的 ansi color codes grep/其他程序用于更改颜色突出显示。
当我从 go 执行命令时,这些颜色会去哪里?有什么方法可以让我从 go 中执行以保留 ansi 颜色代码,并将 grep 的输出复制到标准输出(类似于帖子 here,但对于 go)?
(我也知道我可以手动重新插入颜色代码。但这看起来很痛苦,我宁愿直接使用 grep 的原始颜色。)
如果问题中的某些内容不清楚/需要澄清,请告诉我。谢谢!
最佳答案
grep
和大多数其他使用颜色的工具在决定是否使用颜色时会检测它们是否正在将输出发送到终端。
文件和管道等通常不想要颜色代码并且不知道如何处理它们。
尽管如此,您仍然可以使用 --color=always
标志强制 grep
输出颜色。
关于bash - 执行时保留颜色代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29375241/