Home
Docu
Projects
Links
Admin
Impressum

 


 

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 eine in Tabelle 1 angegebene Zahl ist.

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 blinkend ^[[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

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).


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

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:

bash: PS1="\[^[[34m\]\u@\h \w \$\[^[[39m\] "
bash: PS1="\[\033[34m\]\u@\h \w \$\\033[39m\] " 
tcsh: set prompt="%{^[[34m%}%n@%m %~ %#%{^[[39m%} "

Das sieht dann so aus:

pete@arnulf /usr/games $

Oder der Benutzername und Host in invers gelb und der Rest normal gelb:

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%} "

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.

pete@arnulf /usr/games $

Nun viel Spaß beim Experimentieren!

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

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.

Get Firefoxnotcpa