Tutonaut
terminal output

Anleitung: Terminal-Ausgabe mit Farben und ASCII-Art aufhübschen

Text im Terminal darf auch farbig und nett formatiert sein – habt Ihr vielleicht mal bei Programm-Hilfen gesehen. Das geht via Tput oder ANSI-Escape-Sequenz

Wenn Ihr Informationen im Terminal ausgeben wollt, muss das nicht langweilig und „schwarz-weiß“ sein. Das könnte interessant sein, wenn Ihr längere Skript-Ausgaben nutzt, Texte von einem Server abruft, Hilfe zu Tools anbieten oder auch einfach einen hübscheren Screenshot machen wollt.

Farben und Kunst

Zum Gestalten des Outputs könnt Ihr vor allem zwei Dinge nutzen: ASCII-Art und Sonderzeichen für eine hübsche Formatierung und Farben sowie weitere Formatierungen des Texts. Der ASCII-Art-Teil ist dabei ziemlich trivial und nur ein ganz kurzer Tipp und daher ganz am Ende als letzter Punkt zu finden. Hier aber erstmal ein simples Beispiel:

terminal output
So könnte ein einfach aufgehübschter Output aussehen.

Bei den Font-Formatierungen sieht es anders aus: Wir zeigen Euch hier zwei grundsätzlich verschiedene Varianten mit Vor- und Nachteilen. Variante 1: Über ANSI-Escape-Sequenzen werden im Terminal Formatierungen gesetzt. Variante 2: Ein spezielles Tool (tput) setzt die Formatierung.

Vorteil der ANSI-Variante: Minimalistisch, einfachster Aufruf und wenn etwas nicht funktioniert, wird der Inhalt dennoch ausgegeben – dann eben mit Steuerzeichen.

Nachteil der ANSI-Variante: Grauenhafte Syntax – mit Varianten.

Vorteil der Tput-Variante: Hübschere Syntax, flexibler und in Standardsystemen vermutlich auch zuverlässiger.

Nachteil der Tput-Variante: Tput möglicherweise beim Nutzer nicht vorhanden und entweder ist der Aufruf komplexer oder es wird ein extra Client benötigt.

Und damit Ihr seht, was mit schwierigerem Aufruf gemeint ist, so werden die Aufrufe später aussehen:

ANSI: curl example.com/foobar
Tput: curl example.com/foobar | sh

Im folgenden Beispiel seht Ihr die Lösungen für eine simple Textdatei, die per curl von einem Server abgerufen wird. Die Screenshots stammen alle aus Git Bash für Windows, in der Linux-Bash und anderen Terminalemulatoren sieht es aber weitestgehend genauso aus.

Variante 1: ANSI

Eine ANSI-Escape-Sequenz ist eine Sequenz von Zeichen, die der Terminal als Anweisung versteht, das Folgende auszuführen – bis zum Ende-der-Sequenz-Zeichen. Leider gibt es mehrere Escape-Sequenzen, was das Ganze etwas verwirrender macht, aber im Grunde ist es ganz simpel. Hier ein Beispiel:

ESC[ARGUMENTEm

Die Sequenz beginnt also mit ESC[, wobei damit nicht die Zeichenkette e-s-c gemeint ist, sondern das Unicode-Sonderzeichen ESC. Das könnt Ihr in den meisten Editoren über Zeichentabellen setzen oder unter Linux auch über den Hex-Code: STRG+ALT+U 1B ENTER. Die Sequenz schließt immer mit m.

terminal output
Hier seht Ihr die ESC-Zeichen in Notepad++.

Und jetzt mal roter Text:

ESC[31m

Fetter Text:

ESC[1m

Text auf grünem Hintergrund:

ESC[42m

Roter, fetter Text auf grünem Hintergrund:

ESC[31;1;42m

Ihr erkennt das Muster: Die Zahlen in den 30ern geben die Vordergrundfarbe an, die in den 40er die Hintergrundfarbe und die 2 steht für die Fettung. Die Reihenfolge dieser Zahlen spielt keine Rolle.

Eine Übersicht der Codes und Sequenzen gibt’s bei Wikipedia.

Hier ein kurzes Praxisbeispiel für eine Datei test.txt:

Standard-Text: Hallo Welt
ESC[31m Roter Text: Hallo Welt
ESC[34;3m Blauer, kursiver Text: Hallo Welt 
ESC[0m Alle Effekte wieder deaktiviert

Achtet auf das ESC[0m – mit der 0 wird alles wieder auf Null gesetzt, sprich, die Effekte verschwinden.

Wenn Ihr diese Datei nun local via cat oder über einen Server und curl ausgebt, seht Ihr das Ergebnis:

cat test.txt
curl example.com/test.txt
terminal output
Über die ANSI-Escape-Sequenzen eingefärbter Text.

Alternative: Als Escape-Sequenz könnt Ihr auch

\e[ARGUMENTEm

verwenden. Allerdings funktioniert das zwar mit cat, aber nicht mit curl. Bei curl müsstet Ihr den Output umleiten:

curl  example.com/test.txt | xargs -0 -I {} printf "{}"

Da müsst Ihr schauen, was Euch lieber ist: Einfacherer Aufruf oder einfacheres Schreiben.

Variante 2: Tput

Wenn Euch das Alles nicht gefällt: Tput ist genau für Euch und diesen Zweck gedacht. Eigentlich ist Tput auch in den meisten Linuxen vorhanden, aber eigentlich bringt eben keine Sicherheit. Dafür ist der Code wesentlich lesbarer – hier mal obiges Beispiel per Tput:

echo Standard-Text: Hallo Welt
tput setaf 1    
echo Roter Text: Hallo Welt
tput setaf 4 bold
echo Blauer, fetter Text: Hallo Welt 
tput sgr0
echo Alle Effekte wieder deaktiviert

Und der Aufruf wäre dann:

curl example.com/test.txt | sh 

Mit anderen Worten: Statt eines reinen Texts mit Auszeichnungen habt Ihr ein echtes, schlankes Skript, das heruntergeladen und dann per sh von der Shell ausgeführt wird.

terminal output
Mit tput sieht es auch nicht anders aus.

Bei tput setzt setaf die Vordergrundfarbe, setab die Hintergrundfarbe, bold die Fettung und sgr0 entfernt wieder alle Effekte. Eine ganz hübsche Übersicht findet Ihr hier.

ASCII-Art

In den 80er war ASCII-Art noch wichtig: In einer Computer-Welt ohne echt Bilder, wurden die Nackedeis noch auf Endlospapier per ASCII-Art ausgedruckt – da blieb zumindest mehr für die Vorstellungskraft übrig. Heute gibt es ganze Star-Wars-Filme als ASCII-Stream.

Aber es ist auch ein einfaches Mittel, um ein wenig „Grafik-Eindruck“ in den Terminal zu bringen. Nutzt einfach einen Onlinedienst wie ascii-art-generator.org: Ihr gebt Euren Text oder ein Bild ein …

terminal output
Das ANSI-Format veranschaulicht auch gleich Variante 1.

… und der Service spuckt die ASCII-Art-Version aus, die Ihr einfach kopieren oder als Textdatei herunterladen könnt. Übrigens: Ihr könnt hier auch das ANSI-Format wählen, dann habt Ihr eine Datei nach der obigen Variante 1.

terminal output
Uiiii, ein Pelikan. Aber Vorsicht: Im Terminal wird das nicht bei jedem ohne Zoom-Anpassung so gut dargestellt.

Darüber hinaus bieten sich Rahmen aus # an – das hat sich einfach etabliert. Und natürlich könnt Ihr ASCII-Art und Rahmen ebenfalls farbig per tput oder Escape-Sequenz bauen. Tipp: Nutz Leerzeichen, keine Tabs – das geht regelmäßig daneben.

In Kombination könnt Ihr dann ziemlich gut lesbare Texte/Ausgaben erzeugen – nochmal das Beispiel vom Anfang:

terminal output
Dezente, eingefärbte ASCII-Art für den Titel, farbig abgesetzte Textteile und ein Abschied im Rautenkasten – sieht doch ganz nett aus, oder?

P.S.: Ich bin kein Designer, hier ging’s um Technik – das geht mit Sicherheit hübschererer …

Mehr Spielereien rund um den Terminal.

Mirco Lang

Mirco Lang

Freier Journalist, Exil-Sauerländer, (ziemlich alter) Skateboarder, Dipl.-Inf.-Wirt, Einzelhandelskaufmann, Open-Source-Nerd, Stichwortschreiber. Ex-Saturn'ler, Ex-Data-Becker'ler, Ex-BSI'ler.

Computer-Erstkontakt: ca. 1982 - der C64 des großen Bruders eines Freunds.

Wenn ich Dir helfen konnte und/oder Du hier mehr über Open Source, Linux, Bastelkram oder auch Windows-Basics lesen möchtest:
Spendier mir einen Kaffee via Paypal.

Artikel kommentieren

Wir benutzen Cookies, um die Webseite zu verbessern. Wenn Du die Seite weiter benutzt, bist Du damit einverstanden.
shares