Shell-Script

全方位100%便攜終端色彩支持檢查

  • December 1, 2018

使用測試終端顏色支持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

TL;博士

建議的檢查將無法在某些 Unix 系統上執行。

長答案

  • POSIX 沒有涵蓋 的這方面**tput**,但請閱讀手冊頁的可移植性部分。
  • 大多數係統確實使用 terminfo 名稱(例如setaf)。
  • 例如 FreeBSD(儘管底層庫是ncurses)提供了一個**tput**只支持termcap名稱的。FreeBSD手冊頁不清楚,但請參閱原始碼,它使用tgetstr( termcap) 而不是tigetstr( terminfo)。
  • terminfo手冊頁列出了和terminfo名稱termcap,例如setafAF。您可以嘗試連續使用兩者,因為退出程式碼會告訴您是否定義了功能。

例如,你可以修改你的測試函式來處理這兩種情況:

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

引用自:https://unix.stackexchange.com/questions/485070