我知道在 bash 中我可以打印一个彩色字符串,例如:
echo -e "\033[33;1mhello\033[0m"
外壳中的输出将是hello
金色的。但是当我将输出重定向到一个文件test.txt
时,它\033[33;
也将在文本文件中。但是,该grep --color=auto
命令不会将这些字符重定向到文本文件中。它怎么能做到这一点?
这个怎么样?
#!/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
它可能在标准输出文件描述符(即 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
使用带有导出标志的 GREP_COLORS 变量。对此进行了测试,它可以工作:
export GREP_COLORS='ms=01;33'
grep --color=auto -e hello