Werden Farben richtig eingesetzt, erleichtern sie die Erkennung durch ihre strukturierende Wirkung ungemein. Das gilt auch für das Terminal, leider sind dort die Farbkennungen weder leicht zu errinnern, noch erhöhen sie die Lesbarkeit des Skriptes. Um dieses Problem zu umgehen, kann man sich eine kleine Funktion schreiben, der man als Parameter einen Text und einen Farbnamen übergibt. Die Funktion erledigt den Rest und gibt den Text farbig auf dem Terminal aus.
function Farbige_Textausgabe () { local Farbe case "$2" in r* ) Farbe='31m' ;; #rot ge* ) Farbe='1;33m' ;; #gelb gr* ) Farbe='1;32m' ;; #grün b* ) Farbe='34m' ;; #blau esac echo -e "\e[$Farbe$1\e[0m" }
Hier sind nur vier Farben definiert worden, aber jedem steht es frei weitere hinzuzufügen. Der Aufruf in einem Skript erfolgt dann ganz einfach:
#!/usr/bin/env bash ... s='Es ist ein Fehler aufgetreten' ... Farbige_Textausgabe $s rot ...
Bleibt noch die Frage zu klären, wohin mit der Funktion? Man kann sie in die .bashrc einfügen, aber wer öfter mit Skripten arbeitet sollte alle häufiger benutzten Funktionen in eine Datei (bspw. Funktionenbibliothek) schreiben, welche am Anfang eines jedes Skriptes „gesourced“ wird:
#!/usr/bin/env bash # Autor # erstellt # geändert # Beschreibung # Parameter source $HOME/bin/Funktionenbibliothek ... exit 0
So vorbereitet kann an jeder Stelle des Skriptes jetzt die Funktion Farbige_Textausgabe aufgerufen werden. Das Skript bleibt gut lesbar und übersichtlicher, genauso wie die Ausgabe. Jetzt muß man sich nur an ein Farbschema halten, bspw. Fehlermeldungen rot, Hinweise gelb und Erfolgsmeldungen grün.
Welche Farbkombinationen gibt es und wie sehen sie auf dem Bildschirm aus? Diese Frage beantwortet ein kleines Skript, welches alle Kombinationen aus Zeichen- und Hintergrundfarbe und ihre jeweilige Codierung ausgibt:
#!/usr/bin/env bash # # Dateiname Farbtabelle # Autor Globenaut # erstellt 15.11.2007 # geändert 03.08.2008 # Beschreibung Gibt eine Tabelle der ANSI-Farben aus. # Parameter $1: kurzer Probetext (3 Zeichen!), optional. t=${1:-gM8} echo -e "\n 40m 41m 42m 43m 44m 45m 46m 47m" for VGe in ' m' ' 1m' ' 30m' '1;30m' ' 31m' '1;31m' ' 32m' '1;32m' ' 33m' '1;33m' ' 34m' '1;34m' ' 35m' '1;35m' ' 36m' '1;36m' ' 37m' '1;37m'; do VG=${VGe// /} echo -en " $VGe \e[$VG $t " for HG in 40m 41m 42m 43m 44m 45m 46m 47m; do echo -en " \e[$VG\e[$HG $t \e[0m" done echo done echo
Wird beim Aufruf dem Skript kein Parameter übergeben, wird gM8 (ein Buchstabe mit Unterlänge, ein breiter Großbuchstabe und eine Ziffer) als Beispieltext verwendet, andernfalls der Text aus dem Parameter. Bei mehr als drei Zeichen gerät allerdings die Tabelle durcheinander. Das Endergebnis sollte in etwa so aussehen:
Ansi-Farben vor schwarzem Terminalhintergrund
Labels: Ansi-Farben, Bash, IT, Skripttipp, Terminal
Kommentare: