Shell-Script
全方位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
TL;博士
建議的檢查將無法在某些 Unix 系統上執行。
長答案
- POSIX 沒有涵蓋 的這方面**
tput
**,但請閱讀手冊頁的可移植性部分。- 大多數係統確實使用 terminfo 名稱(例如
setaf
)。- 例如 FreeBSD(儘管底層庫是
ncurses
)提供了一個**tput
**只支持termcap
名稱的。FreeBSD手冊頁不清楚,但請參閱原始碼,它使用tgetstr
(termcap
) 而不是tigetstr
(terminfo
)。terminfo
手冊頁列出了和terminfo
名稱termcap
,例如setaf
和AF
。您可以嘗試連續使用兩者,因為退出程式碼會告訴您是否定義了功能。例如,你可以修改你的測試函式來處理這兩種情況:
colors_supported() { command -v tput > /dev/null 2>&1 && ( tput setaf || tput AF ) > /dev/null 2>&1 }