全方位100%便携终端色彩支持检查

全方位100%便携终端色彩支持检查

使用测试终端颜色支持tput

#!/bin/sh
colors_supported()
{
    command -v tput > /dev/null 2>&1 && tput setaf 1 > /dev/null 2>&1
}

我目前正在使用此代码来确定是否tput支持终端颜色。

看起来运行良好,问题是:这段代码 POSIX-ly 是否 100% 可移植并可在各种基于 Unix 的系统上使用?我指的是 Linux、*BSD 等。


我之所以这么问,是因为目前我无法在所有地方都进行尝试。


哪些颜色:

tput setaf 1
tput setaf 2
tput setaf 3
tput setaf 4
tput setaf 5
tput setaf 6
tput setaf 7

答案1

长话短说

建议的检查在某些类型的 Unix 系统上将无法工作。

长答案

  • POSIX 不涵盖这方面tput,但请阅读可移植性手册页的部分。

  • 大多数系统确实使用 terminfo 名称(例如setaf)。

  • 例如 FreeBSD(尽管底层库是ncurses)提供了tput仅支持termcap名称。自由BSD手册页不太清楚,不过可以看看源代码,它使用tgetstrtermcap) 而不是tigetstr( terminfo)。

  • terminfo手册页列出了terminfotermcap名称,例如,setafAF。您可以尝试连续使用两者,因为退出代码告知该功能是否已定义。

    例如,您可以修改测试函数以通过以下方式处理任一情况:

    colors_supported()
    {
        command -v tput > /dev/null 2>&1 && ( tput setaf || tput AF ) > /dev/null 2>&1
    }
    

相关内容