我需要确定我的终端是否使用bash脚本打印彩色输出。有没有直接的shell命令来做到这一点?我怎样才能做到这一点?
我的主要目标是确定输出是否与终端的默认字体颜色匹配。如果它不匹配,我应该在文本文件中写一条警告消息。
答案 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(成功),如果没有,则退出非零(失败)。-P
(PERL正则表达式)来解释控制序列,因为POSIX正则表达式不支持转义字符。请注意\\x1b
中的双反斜杠,这意味着您让grep
处理转义而不是shell。 GNU grep支持Perl正则表达式,但似乎BSD(包括Mac OS X)不支持。如果某些脚本检测到输入类似tty,则只使用控制字符,因此您可能希望使用script
command将包含控制字符的输出直接捕获到文件中。
答案 1 :(得分:0)