Wie kann ich die Farbfähigkeit des Terminals über die Befehlszeile überprüfen?

Wie kann ich die Farbfähigkeit des Terminals über die Befehlszeile überprüfen?

Ich schreibe:

  $ infocmp -1 xterm
        ...
    Farben#8,
    fett=\E[1m,
    blink=\E[5m,
        ...
  $ tput -Txterm Farben && echo OK || echo err
8
OK
  $ tput -Txterm blink && echo OK || echo err
^[[5mOK

Ich kann alsotputum die Netzhautfunktionen zu überprüfen.

Ist diese Lösung portierbar? Gibt es andere Lösungen?

Oder vielleicht komme ich mit der Lösung nicht weiter:

  $ [ $TERM = xterm ] && echo ok || echo err
OK

Eine Verwendung besteht darin, PS1 in .bashrc festzulegen. Eine andere besteht darin, die Ausgabe hervorzuheben, um die Aufmerksamkeit vom sh-Skript abzulenken. Ich kann diese Lösung verwenden:

PS1='bash# '
Fall "$TERM" in
  xterm*) PS1='\[\033[35m\]bash# \[\033[0m\]'
  ;;
esac

das nur integrierte Bash-Befehle verwendet (also effizient) und in allen meinen Fällen funktioniert, aber leider nicht portierbar ist.

Antwort1

Die Verwendung tputist auf eine große Anzahl von Betriebssystemen portierbar.

Durch die Überprüfung des Rückgabecodes erfahren Sie jedoch nur, ob die Terminfo-Datenbank der Plattform in ihrem Eintrag für „xterm“ eine Definition dieser Funktion enthält.

Der Rückgabecode gibt keinen Aufschluss darüber, ob der aktuell verwendete „xterm“-Client diese Funktion tatsächlich unterstützt.

Beachten Sie, dass es eine Vielzahl von Software-Programmen gibt, die behaupten,'xterm'-kompatibel. Es ist durchaus wahrscheinlich, dass nicht alle von ihnen alle „xterm“-Funktionen unterstützen, insbesondere wenn man bedenkt, dass mehrere aufeinanderfolgende Versionen der Referenzimplementierung von xterm veröffentlicht wurden und wahrscheinlich auch einige Forks. Der xterm-Betreuer sagt: „Keine implementiert auch nur die Hälfte der xterm-Steuerelemente.“

Soweit ich weiß, hat keines der üblichen Standardisierungsgremien (ANSI, ECMA, The Open Group) einen Standard veröffentlicht, der xterm definiert. Der aktuelle Betreuer von xterm pflegt auch einenvt100-Testprogramm (vttest)um ihn bei seiner außeruniversitären Arbeit zu unterstützen.

Daher gibt es wahrscheinlich keine Möglichkeit, dass eine Anwendung selbst den TERM-Wert nutzen kann, um sicherzustellen, dass ein Terminal, das als Xterm bezeichnet wird, tatsächlich eine bestimmte Xterm-Funktion unterstützt. Zumindest nicht für eine beliebige Auswahl einer Xterm-Funktion. Wenn Sie einen Menschen einbeziehen (wie ich mich erinnere, hat vttest das getan), haben Sie möglicherweise eine bessere Chance.

Antwort2

Ja, es ist portabel. Wie wäre es damit:

# BASH : Configure things differently if current terminal has >= 8 colors.
if which tput > /dev/null 2>&1 && [[ $(tput -T$TERM colors) -ge 8 ]]; then
    echo "Configure stuff to use colors here!"
else
    echo "No tput or less than 8 colors, default to no coloring"
fi

verwandte Informationen