Unix Shell Skill

Die Unix-Shell ist nichts ohne die unter Unix immer bereitstehenden Unix-Werkzeuge - allen voran "grep", "sed", "test", "awk", "expr", "cat", "sort", "uniq" und natürlich "echo". Zusammen beschreibt man sie auch gern als Metaobjekt-Sprache - denn man hält sich erst gar nicht mit Einzelobjekten auf, sondern nimmt gleich ganze Dateien und erichtet zwischen den Byteströmen mittels Pipes und Subprozessen ein ganzes Geflecht, mit dem man auch Gigabytes an Daten verarbeiten kann.

Mit Sicherheit gehört das Hauptanwendungsfeld von Unix-Shell Programmierung in die Installation und Konfiguration von Software, bei der Dateien im Umfeld des Betriebssystems angepasst werden. Aber woran man oft nicht denkt, die in Makefiles stehenden Zeilen sind ebenfalls Unix-Shell Anteile, und bei entsprechenden Build-Komplexitäten kann auch dieser Makefile-Code sehr komplex werden.

Tatsächlich habe ich mir angewöhnt, wiederkehrende Shell-Funktionen nicht nur in einem allgemeinen "~/bin" Verzeichnis zusammenzufassen, sondern vielfach "Makefile"s lokal zu schreiben - zum Beispiel für den Quellplatz dieses Webservers, wo es Makefile-Zeilen gibt, die mittels der Unix-Kommandozeile die HTML-Files miteinander verweben und zum Webserver kopieren, aber auch Snapshots für eine Zwischenarchivierung erstellen.

Projekte

Eine der wichtigsten Anwendungen ergibt sich für Opensource-Projekte, die auf Autoconf und Automake basieren. In Autoconf nutzt man einen Makroprozessor (M4), der Shellbefehle aus einer Bibliothek einsetzen kann für die automatische plattformgerechte Konfiguration von Software, und Automake bietet Hilfestellung, die Shell-Buildbefehle möglichst plattformneutral miteinander zu verknüpfen. Meine Engagement reichte hier soweit, dass ich das "Autoconf Macro Archive" (bei Sourceforge) errichtete, dass eine Unzahl an Makros mit eingebetteten Unix-Shell Kommandos enthält.

Eines der kompliziertesten Unix-Shell Projekte ist der "mksite.sh" Doc-Prozessor, mit dem auch die vorliegenden Webseiten zum großen Teil erstellt sind. Es ist ursprünglich auch nur eine Zusammenfassung von Unix-Zeilen, die in verschiedenen Makefiles in verschiedenen Opensource-Projekten vorlagen, wo sie die Dokumentation erstellen - und die gesammelte Funktionalität steht nun leicht anderen Projekten zur Verfügung, auch solchen wie diesen hier, die fast ausschließlich Textdokumente haben. Über die Jahre ist dieses Werkzeug fast schon zu einem Content-Management-System herangewachen.