shell脚本如何判断它是否在支持256色的xterm窗口中运行?

我正在编写一个shell脚本,我希望在出现时使用256色的支持。 在一个正义的世界里, xterm会简单地将TERM环境variables设置为xterm-256color ,我会使用tput colors来发现支持。

但我们生活在一个不公正的世界。 即使使用TERM=xterm-256color启动, xterm也将TERM设置为xterm 。 有没有什么我可以从一个shell脚本内做的事情来发现是否脚本运行与stdout连接到一个tty在一个256色的xterm窗口中运行? 如果是这样,我可以自己设置环境variables。

您可以检查xterm版本 – $ XTERM_VERSION。 虽然我不确定xterm从哪个版本开始支持256种颜色。 其他终端(例如gnome-terminal)的行为与xterm类似,但也设置COLORTERM变量来正确终端名称(gnome-256color)。

因为现在大多数xterm -s都被着色了,所以我会假定终端有256种颜色,并且让脚本接受一个选项(或许是-monochrome或者是-monochrome )。

顺便说一句,我也看到一些强大的用户强制-monochrome行为的原因:在非常慢的连接(想到洲际ssh ),禁用颜色来降低带宽可能是有用的。