3

你好 - 如果我想确定终端可以显示的颜色数量,我只需读取输出

 tput colors

...但是我不知道如何确定我正在写入的终端是否可以支持其他格式请求,例如粗体、下划线、反向视频、闪烁(糟糕!)。

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

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

4

3 回答 3

3

您可以使用infocmp它,以及grep您正在寻找的功能。如果找到结果,则支持该功能:

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

为了获得不同功能的名称,请查看有关 terminfo 的 Linux 手册页,或者查看手册页以获取名称的表格布局。

于 2012-08-02T18:38:22.270 回答
2

可能有更简单的方法,但您可以通过运行查询 terminfo 数据库

infocmp $TERM

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

于 2012-08-02T18:37:19.390 回答
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(that's a one) 选项每行输出一个属性。

infocmp -1 | grep smul
于 2012-08-03T01:21:07.347 回答