Jan

06

Bash Escape Codes nach HTML konvertieren

Posted by : Florian Löffler | On : 06.01.2008


Für viele Artikel (wie zum Beispiel diesen hier ;) ist es praktisch die Ausgabe von Shellcommandos sauber formatiert auf der Webseite darstellen zu können. Man könnte natürlich Screenshots machen, aber die JPEGs sind verwaschen, verschwenden Bandbreite und sind für Suchmaschienen nicht interpretierbar.
Viel besser ist es den Text schön mit HTML Tags formatiert darzustellen. Allerdings wird es auf Dauer etwas anstrengend die Ausgaben per Hand mit HTML Tags zu formatieren. Ein Weg zur automatisierten Umwandlung von Bash Escape Codes in HTML Tags muss also her ;)

Um das Ganze hinzukriegen habe ich zwei Skripte geschrieben:
Eines um die Ausgaben eines Kommandos inklusive der Bash Escape Codes in eine Datei zu loggen und ein zweites um diese in HTML Tags zu übersetzen.
Das Loggen der Ausgabe wird vom record-Skript ausgeführt, da ein direktes Umleiten in eine Datei die nötigen Bash Escape Codes wegfiltern würde (nur eine Shell bekommt die Escape Codes wirklich zur Anzeige übermittelt).
Die Übersetzung der Escape Codes in HTML Tags wird von bash2html ausgeführt, was eigentlich nur ein nettes Wrapper Skript für einen sed-Aufruf darstellt. Alle Ersetzungsoperationen werden im zugehörigen sed-Skript bash2html.sed vorgenommen.

Der gesamte Block wird in <pre class=”console”></pre> Tags eingeschlossen und kann per CSS formatiert werden. Einzelne Textteile erhalten ihre Vorder- bzw. Hintergrundfarbe über <span style=”color: foo; background-color: bar;”></span> Tags, wobei bei schwarzem Hintergrund in der Konsole keine background-color im style-Tag definiert wird.


1. Ausgabe eines Befehls mit record Skript loggen

acer /var # ~/record 'ls --color' ~/test.log
cache
db
empty
gdm
lib
lock
log
lost+found
mail
run
spool
state
tmp
www

Die Ausgabe inklusiver Bash Escape Codes ist nun in ~/test.log zu finden:

^[[00m^[[01;34mcache^[[00m
^[[01;34mdb^[[00m
^[[01;34mempty^[[00m
^[[37;44mgdm^[[00m
^[[01;34mlib^[[00m
^[[01;34mlock^[[00m
^[[01;34mlog^[[00m
^[[01;34mlost+found^[[00m
^[[01;36mmail^[[00m
^[[01;34mrun^[[00m
^[[01;34mspool^[[00m
^[[01;34mstate^[[00m
^[[30;42mtmp^[[00m
^[[01;34mwww^[[00m
^[[m

2. Die geloggte Ausgabe in HTML umwandeln

acer ~ # ./bash2html test.log
Using sed filter script from '/home/floeffler/scripts/bash2html.sed'.
Processing...done.

<pre class="console">
<span style="color: Blue;">cache</span>
<span style="color: Blue;">db</span>
<span style="color: Blue;">empty</span>
<span style="color: Silver; background-color: Blue;">gdm</span>
<span style="color: Blue;">lib</span>
<span style="color: Blue;">lock</span>
<span style="color: Blue;">log</span>
<span style="color: Blue;">lost+found</span>
<span style="color: Aqua;">mail</span>
<span style="color: Blue;">run</span>
<span style="color: Blue;">spool</span>
<span style="color: Blue;">state</span>
<span style="color: Black; background-color: Lime;">tmp</span>
<span style="color: Blue;">www</span>
</pre>

Result also saved to 'test.log.html'.
done.

Die obige HTML-formatierte Ausgabe ist nun ebenso in der Datei test.log.html zu finden.
Standardmäßig wird an die Eingabedatei einfach ein .html angehängt, um die Ausgabedatei zu erhalten. Das Skript unterstützt aber einige Optionen, um dieses Verhalten zu beeinflussen (siehe bash2html -h).


3. Anmerkungen


Zwei Sachen bleiben noch anzumerken:

  • ^[ ist die Darstellung für das Bash Escape Zeichen und leitet die Escape Sequenz ein. Obwohl die Repräsentation so erscheint als wären es zwei Zeichen ist es tatsächlch nur ein einzelnes und kann in Strings durch /033 mit seinem ASCII Code ausgeben oder direkt über die Tastatur mit ALT + v und danach ESC eingegeben werden. Ein copy and paste der obigen Zeichen wird nicht funktionieren, da ^[ als zwei einzelne Zeichen kopiert würden.
  • Die gesamte Umwandlung findet im sed-Skript bash2html.sed statt und erhebt zum derzeitigen Stand keinen Anspruch auf Vollständigkeit oder gar Korrektheit. Die momentane Version ist nur eine schnelle Minimallösung und funktionierte für meine Anwendungsfälle bisher zufriedenstellend.

Anregungen und Erfahrungsberichte sind natürlich wie immer erwünscht ;)
Have fun!

Downloads
 bash2html (2.86 kb)07.01.2008 22:29:00
 bash2html.sed (2.15 kb)07.01.2008 22:29:17
 record (626 b)07.01.2008 22:29:18

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht.