
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 tput
ist 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