Zurück

Farbige Shell

Die Bash kanns auch bunt treiben. Vielleicht haben Sie auch schon mal farbige Ausgaben in der Shell gesehen. Wie werden die gemacht? Dieser Artikel versucht dies zu erläutern.

Stellen Sie sich vor sie wollen in einem Shellscript eine Fehlermeldung oder Warnung deutlich hervorheben. Dazu eignen sich z. B. Farbgebung oder Fettschrift. Beides läßt sich über sogenannte ANSI Escape Steuerzeichen verwirklichen.

Diese werden mit einem Escape eingeleitet. Da Escape aber kein schreibbares Zeichen ist, läßt sich dafür folgende Zeichenkette (welche im Prinzip eine Oktalzahl darstellt) verwenden: \033. Weiter geht es dann mit einer eckigen Klammer auf, dann einer Zahl welche die Schreibweise des Textes versinnbildlicht (also etwa unterstrichen oder fett) einem Strichpunkt und einer Zahl für den Farbwert. Abgeschlossen wird das dann mit einem m. Dann kommt der darzustellende Text und am Ende muß eine solche Sequenz auch zum zurücksetzen auf die Normalwerte benutzt werden. Für die Normalwerte gibt man einfach eine 0 an.

Das ganze sieht dann etwa so aus:

\033[1;32mMein Text\033[0m

Das sieht leider etwas kryptisch aus funktioniert aber prima. Testen sie das mal in einem echo-Befehl:

echo -e "\033[1;32mMein Text\033[0m"

Sie sehen das mein Text in grün und fett geschrieben erscheint. Der Parameter -e sagt dem echo-Kommando explizit das Escape-Sequenzen interpretiert werden sollen. Dieser Parameter ist in der Bash notwendig, in manchen anderen Shells (z. B. der zsh) nicht.

Die Werte für die erste Zahl sind: 0 normal, 1 fett, 4 unterstrichen, 5 soll blinkend sein, das funktionierte bei mir auf dem System auf dem ich dies testete jedoch nicht, 7 schließlich ist inverse Farbdarstellung.

Die Vordergrundfarben werden durch folgende Werte definiert: 30 schwarz, 31 rot, 32 grün, 33 gelb, 34 blau, 35 magenta, 36 cyan, 37 weiß. Daneben gibt es auch noch Hintergrundfarben, die einfach mit einer 4 statt mit einer 3 beginnen, also: 40, 41, 42, 43, 44, 45, 46, 47.

Kann ich diese Farben auch für meinem Prompt verwenden? Ja, das geht. Die Escape Sequenz muß jedoch für den Prompt etwas maskiert werden. dies kann in der Bash z. B. so aussehen:

export PS1='\u@\[\033[4;32m\]\h\[\033[0m\]:\W\$ '

Die Escape Sequenz muß also innerhalb eines \[\]-Blocks stehen. Mit dem obigen Kommando wird der Hostname im Prompt grün und unterstrichen dargestellt. Dies kann nützlich sein, wenn man viele Rechner per ssh aus der Ferne betreut um immer im Blick zu haben auf welchem Rechner man eigentlich gerade seine Befehle eintippt.

Zurück

Zurück nach oben
Shell mit Kommandoprompt