确定终端格式化输出的能力?

时间:2012-08-02 18:17:09

标签: bash terminfo

Hullo - 如果我想确定终端可以显示的颜色数量,我只需阅读

的输出
 tput colors

...但是我无法弄清楚如何确定我写的终端是否可以支持其他格式化请求,例如粗体,下划线,反向视频,闪烁(哎呀!)。

我看到如何通过tput设置输出,但是在尝试之前不确定该功能是否存在。

我应该简单地假设所有终端都存在这种能力吗?

3 个答案:

答案 0 :(得分:3)

您可以使用infocmp进行此操作,并grep使用您要查找的功能。如果找到结果,则支持该功能:

infocmp | grep bold
    bel=^G, bold=\E[1m, clear=\E[H\E[2J, cr=^M,

要获取不同功能的名称,请查看the Linux man pages for terminfothis one以获取名称的表格布局。

答案 1 :(得分:2)

可能有一种更简单的方法,但您可以通过运行

来查询terminfo数据库
infocmp $TERM

查看当前终端的完整条目(将$TERM替换为任何支持的终端类型的名称)。您可能希望阅读手册页以了解如何根据您的需要创建最容易解析的输出。

答案 2 :(得分:1)

如果您尝试使用未定义属性的tput命令,它将返回非零退出代码。您可以重定向正常输出(如果有),以避免它生效。

for attr in bold rev smul blink sshm
do
    if ! tput "$attr" > /dev/null
    then
        echo "Attribute $attr is undefined"
    fi
done

否则,如果您grep输出infocmp,请使用-1(这是一个)选项输出每行一个属性。

infocmp -1 | grep smul