0

我知道在 bash 中我可以打印一个彩色字符串,例如:

echo -e "\033[33;1mhello\033[0m"

外壳中的输出将是hello金色的。但是当我将输出重定向到一个文件test.txt时,它\033[33;也将在文本文件中。但是,该grep --color=auto命令不会将这些字符重定向到文本文件中。它怎么能做到这一点?

4

3 回答 3

3

这个怎么样?

#!/bin/bash

if [ -t 1 ]; then
    echo -e "\033[33;1mhello\033[0m"
else
    echo hello
fi

这里的解释:

test -t <fd>,其缩写形式为[ -t <fd> ],检查描述符<fd>是否为终端。资源:help test

于 2013-09-02T08:24:54.210 回答
1

它可能在标准输出文件描述符(即 1)上使用isatty(3)库函数。所以使用

if (isatty(STDOUT_FILENO)) {
   // enable auto colorization
}

在你的 C 代码中。

在 shell 脚本中,使用tty(1)命令:

if tty -s ; then
  # enable auto colorization
fi

或者只是-t 测试(1)

if [ -t 1 ]; then
  # enable auto colorization
fi
于 2013-09-02T08:14:20.920 回答
0

使用带有导出标志的 GREP_COLORS 变量。对此进行了测试,它可以工作:

export GREP_COLORS='ms=01;33'
grep --color=auto -e hello
于 2013-09-02T08:38:07.090 回答