用于识别彩色控制台输出的Shell脚本

时间:2014-10-13 04:26:19

标签: bash shell

我需要确定我的终端是否使用bash脚本打印彩色输出。有没有直接的shell命令来做到这一点?我怎样才能做到这一点?

我的主要目标是确定输出是否与终端的默认字体颜色匹配。如果它不匹配,我应该在文本文件中写一条警告消息。

2 个答案:

答案 0 :(得分:1)

控制字符也是输出字符,因此您可以检测到与this answer类似的序列。

if printf "\x1b[31mRed\x1b[0m" | grep -Pq "\\x1b\[[0-9;]+m"; then
  echo colored
else
  echo uncolored
fi
  • printf支持输出控制序列。如果您使用echo,则需要-e
  • grep -q会阻止打印,如果找到匹配则只退出0(成功),如果没有,则退出非零(失败)。
  • 你需要在grep上使用-P(PERL正则表达式)来解释控制序列,因为POSIX正则表达式不支持转义字符。请注意\\x1b中的双反斜杠,这意味着您让grep处理转义而不是shell。 GNU grep支持Perl正则表达式,但似乎BSD(包括Mac OS X)不支持。

如果某些脚本检测到输入类似tty,则只使用控制字符,因此您可能希望使用script command将包含控制字符的输出直接捕获到文件中。

答案 1 :(得分:0)

我这样做的方法是搜索 Escape Sequence,紧随其后 通过color code,示例

# red
awk '/\033\[31m/'

Example