Nutzen der Xterm Escape-Sequenzen Farbiger Prompt
Wer hat noch nicht seitenweise Output von einem Programm erhalten und dann nach seinem Prompt gesucht, um den Anfang zu finden? Farbliche Hervorhebung kann in einem solchen Fall gute Dienste leisten.
Die Shell ist nach wie vor mit das Erste, mit dem ein(e) Linux-Benutzer(in) in Berührung kommt, wenn er/sie anfängt, sich mit dem System zu beschäftigen. Auch nach der Installation von X bevorzugen viele, eine Shell im xterm zu öffnen und viele Aufgaben von dort aus zu lösen. Die Shell bietet dem Benutzer im interaktiven Modus ein User-Interface (wenn auch kein grafisches), das hohe Flexibilität erlaubt. So wundert es nicht, wenn in den info- und man-Pages dem Prompting besonderes Augenmerk gewidmet wird. Unter anderem findet sich dort ein Hinweis zur Einbettung von Escape-Sequenzen. Weiter schweigen sie sich aber darüber aus, was damit möglich ist und wie Escape-Sequenzen aufgebaut sind.
Sie werden es nicht mehr missen wollen!
Da die Bash und Tcsh wohl unter Linux die am meist benutzten Shells sind, werde ich hier an Hand dieser beiden die Vorgehensweise erklären. Angenommen der momentane Prompt ist folgendermaßen definiert:
bash: PS1="\u@\h \w \$ " tcsh: set prompt="%n@%m %~ %# "
so erscheint zum Beispiel für den User pete auf dem Host arnulf im Verzeichnis /usr/games der Prompt so:
pete@arnulf /usr/games $
Nun ist dieser Prompt eher unauffällig und erhöht nicht die Übersichtlichkeit beim Arbeiten. Soll dieser Prompt eine persönliche Note bekommen, ist es angebracht, Escape-Sequenzen einzubeziehen, um die Darstellung des Textes zu verändern. Escape (engl.: flüchten) bedeutet in diesem Zusammenhang, den "normalen" Weg zu umgehen, und statt dessen auf einer anderen Ebene Einfluß zu nehmen. Hier besonders auf die Darstellung des Textes. Sie werden also nicht als lesbare Zeichen dargestellt, sondern vom Terminal interpretiert. Diese Escape-Sequenzen werden eingeleitet durch das Escape-Zeichen (^[). Dieses können Sie unter der Shell durch Eingabe von Ctrl-v gefolgt von Esc erzielen. Das gilt auch für den Editor vi im Insert-Modus. Unter Emacs geben Sie Ctrl-q Esc ein. Alternativ können Sie auch die oktale Schreibweise \033 verwenden. Zur Änderung der Farbe hat die Escape-Sequenz folgende Form:
^[[m
wobei
Sollen mehrere Attribute gleichzeitig verändert
werden, können die entsprechenden Zahlen durch ein ";"
getrennt angegeben werden. Führen Sie das Kommando
echo "^[[31mrot^[[0m" aus, so erscheint das Wort rot
in der Farbe Rot. Die abschließende Zeichenfolge
^[[0m ist wichtig, damit die Terminal-Einstellung wieder
zurückgesetzt wird. Führen Sie das Skript in Listing 1 aus, sehen Sie die verschiedenen
Kombinationen von Vorder- und Hintergrundfarbe (siehe Abb. 1).
Für eine komplette Liste der Xterm Escape-Sequenzen siehe [1].
Soll nun der Prompt blau erscheinen, ist die Umgebungsvariable PS1 folgendermaßen
zu setzen:
Das sieht dann so aus:
Oder der Benutzername und Host in invers gelb und der Rest normal gelb:
Zu beachten ist hierbei, daß die Escape-Sequenzen bei der bash eingebettet sind in
\[ und \] und bei der tcsh in %{ und %}.
Nun, das ist kryptisch, aber das Ergebnis kann sich sehen lassen.
Nun viel Spaß beim Experimentieren!
Dieser Online-Artikel kann Links enthalten, die auf nicht mehr
vorhandene Seiten verweisen. Wir ändern solche "broken links"
nur in wenigen Ausnahmefällen. Der Online-Artikel soll möglichst
unverändert der gedruckten Fassung entsprechen.
Tabelle 1: Escape-Sequenzen
Sequenz
Effekt
Sequenz
Effekt
^[[0m
Normal
^[[36m
Vordergrund cyan
^[[1m
bold
^[[37;44m
Vordergrund weiß,
Hintergrund blau
^[[22m
Nicht bold
^[[39m
Vordergrund normal
^[[4m
Unterstrichen
^[[40;33m
Hintergrund schwarz,
Vordergrung gelb
^[[24m
Nicht unterstrichen
^[[41m
Hintergrund rot
^[[5m
^[[42m
Hintergrund grün
^[[25m
Nicht blinkend
^[[43m
Hintergrund gelb
^[[7m
invers
^[[44m
Hintergrund blau
^[[27m
Nicht invers
^[[45m
Hintergrund magenta
^[[30m
Vordergrund schwarz
^[[46m
Hintergrund cyan
^[[31m
Vordergrund rot
^[[47m
Hintergrund weiß
^[[32m
Vordergrund grün
^[[49m
Hintergrund normal
^[[33m
Vordergrund gelb
^[[34m
Vordergrund blau
^[[35m
Vordergrund magenta
Abb. 1: Farbkombinationen für Vorder- und Hintergrund
Listing 1: colors
#!/bin/bash
# colors: zeigt die vorhandenen Farben
# in den verschiedenen Kombinationen
# für Vorder- und Hintergrund
for i in 30 31 32 33 34 35 36 37 39
do
for j in 40 41 42 43 44 45 46 47 49
do
# gleicher Vorder- und Hintergrund wird übersprungen
if [ $j -eq $[ i + 10 ] ]; then
continue
fi
echo -e $i $j "\033[${i};${j}mFarbe\033[0m"
done
done
bash: PS1="\[^[[34m\]\u@\h \w \$\[^[[39m\] "
bash: PS1="\[\033[34m\]\u@\h \w \$\\033[39m\] "
tcsh: set prompt="%{^[[34m%}%n@%m %~ %#%{^[[39m%} "
pete@arnulf /usr/games $
bash: PS1="\[\033[1;7;33m\]\u@\h\[\033[27m\] \w \$\[\033[39;22;0m\] "
tcsh: set prompt="%{\033[1;7;33m%}%n@%m%{\033[27m%} %~ %#%{\033[39;22;0m%} "
pete@arnulf
/usr/games $
Infos
[1]
Xterm Control Sequences, Edward Moy, University of California, Berkeley;
Revised by Stephen Gildea X Consortium (1994); Thomas Dickey XFree86 Project (1996).
ftp://ftp.uni-koeln.de/windows/XFree86-3.3/doc/PostScript/ctlseqs.ps
Der Autor