Unter Windows kann ich einfach „ color a
oder“ oder color b
„oder color c
“ usw. eingeben, um die Schriftfarbe im Terminal vorübergehend zu ändern.
Gibt es im Bash-Terminal einen Befehl, um dies zu tun?
Ich möchte keine dauerhaften Änderungen vornehmen, es reicht, wenn die Sitzung erst einmal offen ist.
Antwort1
Sie beziehen sich auf eineBefehldas Werte von 0-f erwartet (also 0 bis 15 Dezimalstellen). Der analoge Befehl würde verwendentput
:
tput setaf 10
("a" ist hexadezimal für 10), für dieVordergrundFarbe und
tput setab 10
für dieHintergrundFarbe. Das sind separateTermininfoFähigkeiten.
Dieses Beispiel geht davon aus, dass Ihre Terminalbeschreibung mindestens 16 Farben hat. Wenn es nur 8 sind, tput
werden Sie das nicht bemerken, aber das Ergebnis wird unbefriedigend sein. Sie können dies sehen, indem Sie
tput colors
Standardmäßig tput
wird der aktuelle Wert von verwendet, $TERM
um eine Terminalbeschreibung auszuwählen. Sie können dies mit der -T
Option überschreiben. Wenn Sie beispielsweisexterm
(Im Gegensatz zu einem anderen Terminal, das TERM
auf „xterm“ eingestellt ist), können Sie die xterm-16color
Terminalbeschreibung wie in diesem Screenshot verwenden:
(Sie können wahrscheinlich sehen, dass die tput
Zeile 15 keinen nützlichen Effekt hatte, was zu erwarten ist, da10
liegt außerhalb des Bereichs von 8 Farben).
Die Terminalbeschreibung, obxterm
oderxterm-16color
(oderxterm-256color
) erklärt tput
, wie man eine Escape-Sequenz erstellt, die in das Terminal geschrieben werden kann. Ihre Bash-Eingabeaufforderung kann ebenfalls Escape-Sequenzen senden, um Farben festzulegen oder zurückzusetzen. Wenn Sie tput
Text in einem Shell-Skript aufgerufen und wiedergegeben haben, sehen Sie möglicherweise den farbigen Text, während sich dieselben Befehle (getrennt durch Bash-Eingabeaufforderungen) möglicherweise nicht auf dieselbe Weise verhalten. Außerdem können einige Programme (wie ls
) Farben festlegen/zurücksetzen. Es gibt nur den Farbstatus eines Terminals, der mit diesen verschiedenen Anwendungen geteilt werden kann; Terminals wechseln nicht automatisch zwischen ihnen.
Das Testen eines Shell-Skripts ist vorhersehbarer, als sich auf die Details Ihrer Shell-Eingabeaufforderung zu verlassen. Hier ist ein Beispiel
#!/bin/sh
case $TERM in
xterm*)
TERM=xterm-256color
;;
linux*)
TERM=linux-16color
;;
esac
export TERM
for p in $(seq 0 15)
do
tput setab $p
for q in $(seq 0 15)
do
tput setaf $q
printf '%x%x' $p $q
done
tput sgr0
printf '\n'
done
und ein Screenshot in xterm: