Terminal

為什麼 tput 在 TERM=vt100 上靜默失敗

  • August 22, 2018

我在 macOS 上使用 zsh 和 iTerm 作為我的終端模擬器,我的環境TERM=xterm-256color預設使用。

如果我執行tput setaf 3它會以程式碼 0 退出。

如果我設置TERM=vt100並執行tput setaf 3它,它會以程式碼 1 退出(表示失敗)。

為什麼會這樣?

vt100沒有註意到和失敗的setaf能力。tput定義可以在terminfo(5)數據庫中找到:

% TERM=xterm-256color infocmp | grep setaf
       setaf=\E[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m,
% TERM=vt100 infocmp | grep setaf
% 

Avt100相當舊,手冊沒有提到支持顏色等花哨的東西(顯然你可以用vt100購買的地墊有不同的顏色……)。

VT100s 從不上色(請參閱ncurses 常見問題解答)。因此終端描述缺少該功能,並且如文件所述, tput 返回錯誤。

1976 年推出 vt100 時,顏色是一項昂貴的功能,沒有用於商品終端。幾年後顏色標準化(至少, 1979 年的 ECMA-48第 2 版提供了此資訊;第 1 版無法檢查)。

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