如何从命令行检查终端颜色功能?

如何从命令行检查终端颜色功能?

我写的:

  $ infocmp -1 xterm
        ...
    颜色#8,
    粗体=\E[1m,
    眨眼=\E[5m,
        ...
  $ tput -Txterm 颜色 && echo OK || echo err
8
好的
  $ tput -Txterm 闪烁 && echo OK || echo err
^[[5m好

所以我可以用输出检查视网膜功能。

这个解决方案可以移植吗?还有其他解决方案吗?

或者也许我可以坚持解决方案:

  $ [ $TERM = xterm ] && echo ok || echo err
好的

一种用途是在 .bashrc 中设置 PS1。另一种用途是突出显示输出以引起 sh 脚本的注意。我可以使用这样的解决方案:

PS1='bash# '
案例“$TERM”
  xterm*) PS1='\[\033[35m\]bash# \[\033[0m\]'
  ;;
埃萨克

它仅使用 bash 的内置命令(非常高效)并且适用于我的所有情况,但不幸的是不可移植。

答案1

其使用tput可移植至大量操作系统。

但是,检查返回代码只能告诉您平台的 terminfo 数据库是否在“xterm”条目中具有该功能的定义。

返回代码不会告诉您当前使用的“xterm”客户端是否真正支持该功能。

请注意,有各种各样的软件程序声称兼容‘xterm’。当然,并非所有的 xterm 都支持所有“xterm”功能,尤其是考虑到 xterm 的参考实现已经发布了几个连续的版本,并且可能有一些分支。xterm 维护者说“没有一个能实现 xterm 一半的控件。”

据我所知,目前还没有一个常见的标准机构(ANSI、ECMA、The Open Group)发布过定义 xterm 的标准。xterm 的当前维护者也维护着一个vt100 测试程序(vttest)协助他的 xterm 工作。

因此,应用程序本身可能无法利用 TERM 值来确保声称是 xterm 的终端实际上​​支持特定的 xterm 功能。至少对于任何任意选择的 xterm 功能来说都不是。如果您让一个人参与(我记得 vttest 就是这么做的),您可能会有更好的机会。

答案2

是的,它是便携式的。这个怎么样:

# BASH : Configure things differently if current terminal has >= 8 colors.
if which tput > /dev/null 2>&1 && [[ $(tput -T$TERM colors) -ge 8 ]]; then
    echo "Configure stuff to use colors here!"
else
    echo "No tput or less than 8 colors, default to no coloring"
fi

相关内容