bash - 执行时保留颜色代码

标签 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 会输出多色文本(例如,以红色突出显示其输出中的任何匹配项)。做一点研究,似乎有特殊的 ansi color codes grep/其他程序用于更改颜色突出显示。

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

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

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

最佳答案

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

文件和管道等通常不想要颜色代码并且不知道如何处理它们。

尽管如此,您仍然可以使用 --color=always 标志强制 grep 输出颜色。

关于bash - 执行时保留颜色代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29375241/

相关文章:

php - 使用bash从mysql获取数据

bash - grep 从屏幕输出并分离

javascript - 使用 Javascript 的背景颜色自动循环

go - 获取 ssh : short read error when trying to parse a public key in golang

linux - 如何将值列表传递给脚本中的shell参数

linux - awk/bash 比较跨行的时间戳和排序时间差异

ios - 为什么我使用以下代码得到错误的像素颜色?

c# - 从 int 获取颜色

go - 从go例程外部停止goroutine

excel - golang将excel表格转换为结构