Tools und Bibliotheken für die Bourne Again Shell Power-ups für die Bash

Von Mirco Lang

Python ohne Bibliotheken? Undenkbar! Beim Shell-Scripting bilden sie hingegen eher die Ausnahme. Dabei lassen sich auch Bash und Konsorten mächtig aufwerten.

Für viele Aufgaben ist die Shell das beste oder zumindest das nächstliegende Werkzeug.
Für viele Aufgaben ist die Shell das beste oder zumindest das nächstliegende Werkzeug.
(Bild: OpenClipart-Vectors / Pixabay)

Das Thema Bibliotheken für die Bash wird durchaus kritisch wahrgenommen. Nicht selten lässt sich die Meinung finden, mit Bibliotheken würde der Geltungsbereich einer Shell deutlich überschritten, ab einer gewissen Komplexität solle doch eine „richtige“ Programmiersprache zum Einsatz kommen. Das kann man aber auch gerne als Unsinn abtun!

Für viele Aufgaben ist die Shell nun einmal das beste Werkzeug, häufig vor allem das Nächstliegende. Und mit Shell-Code lassen sich durchaus echte Programme entwickeln. Doch selbst im Admin-Alltag gibt es immer wieder komplexe Befehle, Pipes und Befehlsketten, die niemand ständig neutippen möchte – der Wunsch nach Wiederverwendung kommt auf.

Meist sammeln sich dann mit der Zeit allerlei Aliase an, später eigene Funktionen und irgendwann sind es ganze Skripte, die hier und da in anderen Skripten eingebettet werden – und sei es „nur“ eine Backup-Funktion. Egal ob Alias oder Skript, es geht im Grunde immer darum, einmal gefundene Lösungen nicht ein zweites Mal finden oder auch nur tippen zu müssen, also die Reusability von Code, selbst wenn Code dann nur einen komplexen find-Befehl meint.

Erfreulicherweise gibt es genügend Menschen, die ausführlich Shell-Scripting betreiben, vornehmlich mit der Bash. Und entsprechend gibt es auch allerlei Bibliotheken für unser aller Lieblingsterminal. Wobei „Bibliothek“ hier einigermaßen relativ verstanden werden muss: Es gibt wirklich reine Bibliotheken, die im Grunde nur eine Ansammlung von Funktionen liefern. Andere Tools bezeichnen sich eher als Framework zum Entwickeln von Anwendungen beziehungsweise zum Erstellen und Verwalten eigener Bibliotheken und Funktionen.

Im Folgenden sehen Sie eine Auswahl spannender Projekte unterschiedlicher Komplexität, die wohl für jeden Techniker, Admin oder Entwickler etwas zu bieten haben. Übrigens: Einige der Projekte sind schon recht betagt und die letzten Commits teils Jahre her. Da es sich aber häufig um Basics handelt und ein Großteil der Bash-Funktionalität schon seit Jahrzehnten besteht, ist das eher selten ein Problem.

Nur ein Fortschrittsbalken

Den Anfang macht hier einmal ein Tool, das sich eindeutig nicht als Bibliothek qualifiziert, aber wunderbar den grundsätzlichen Einsatz und Nutzen auch für Einsteiger zeigt: Shell-Progressbar macht nichts weiter, als einen Fortschrittsbalken im Terminal zu realisieren – eine Aufgabe, die wohl in Millionen von Skripten wieder und wieder umgesetzt wird. Der Einsatz ist prototypisch – Skript per „source“ laden und dann die darin gefundene Funktion ausführen:

source shell-progressbar.sh
progress 50 „Die Hälfte ist geschafft …“

Der Vollständigkeit halber die Ausgabe:

[##########................] (50%) Die Hälfte ist geschafft …

Wie gesagt, sehr einfach, aber es veranschaulicht sehr gut, dass das Rad auch in der Shell nicht ständig neu erfunden werden muss.

Bashmenot

Die kleine, klassische Bibliothek bashmenot kann typische Bash-Kleinigkeiten aus dem Alltag vereinfachen. Technisch ist bashmenot simpel umgesetzt, im Wesentlichen lädt das Hauptskript lediglich 13 separate Skripte wie „curl.sh“ und „git.sh“, die wiederum jeweils Funktionen rund um die namensgebenden Tools beinhalten. Über das curl-Skript steht zum Beispiel die Funktion „format_http_code_description“ zur Verfügung, die über den Aufruf …

format_http_code_description 404

… die Ausgabe „404 (not found)“ triggert. Eine simple Möglichkeit also, HTTP-Status-Codes mit einer Beschreibung zu versehen. Gut bei bashmenot: Die Funktionen sind weitgehend selbstbeschreibend benannt. Schlecht: Es gibt keine Dokumentation (mehr). Allerdings gehört massives Ausprobieren bei Bash-Bibliotheken wohl einfach dazu.

Shell Scripting Templates and Utilities

Das Repository von Nate Landau ist ähnlich simpel aufgebaut wie bashmenot und bietet in drei Bereichen Hilfe beim Entwickeln komplexer Bash-Skripte: Ersetzungen mit sed, Debugging mit BATS und eine Reihe weiterer Helferlein, etwa zum Manipulieren von Arrays oder zum Bereinigen von Strings von doppelten Leerzeichen und dergleichen. Ebenfalls dabei: Die bei bashmenot beschriebene HTTP-Status-Code-Übersetzung – sogar ein wenig hübscher.

Bash Boilerplate

Bash Boilerplate geht einen komplett anderen Weg – und verhält sich auch nicht wie eine Bibliothek, die Funktionen bietet, die eingebettet werden. Stattdessen liefert das Repo ein paar Vorlagen für eigene Skript-Projekte, die dann wiederum einige sinnvolle Einstellungen und Kommandos enthalten, beispielsweise zum Umgang mit Exit-Codes, Argumenten und Variablen. Über die Datei „helpers.bash“ gibt es letztlich dann aber doch noch ein paar Features zum Einbetten, beispielsweise einen ASCII-Spinner, der sich so lange dreht, wie ein bestimmter Prozess aktiv ist.

Jetzt Newsletter abonnieren

Täglich die wichtigsten Infos zu Softwareentwicklung und DevOps

Mit Klick auf „Newsletter abonnieren“ erkläre ich mich mit der Verarbeitung und Nutzung meiner Daten gemäß Einwilligungserklärung (bitte aufklappen für Details) einverstanden und akzeptiere die Nutzungsbedingungen. Weitere Informationen finde ich in unserer Datenschutzerklärung.

Aufklappen für Details zu Ihrer Einwilligung

Vesper

Das Übersetzen von HTTP-Status-Codes scheint ein populäres Hobby – auch Vesper leistet das. Kein Wunder, denn Vesper ist ein recht simples „HTTP-Framework“ – oder in den Worten des Autors: Ein Experiment. Im Wesentlichen ist Vesper ein Parser für HTTP-Requests, welche dann mittels ncat als Kommandozeilen-Instant-Webserver beantwortet werden. Vesper ist nichts für den sofortigen produktiven Einsatz, hilft aber gegebenenfalls beim Aufsetzen von kleineren „Web-Services“ ohne Webserver. Eigentlich ist Vesper „nur“ Code gewordenes Brainstorming, aber eben interessant.

Lobash

Bei Lobash wird es nun schon deutlich umfangreicher: Die Bibliothek liefert über 110 Module (Funktionen) und über 600 auf BATS basierende Testfälle, angelehnt an die Javascript-Bibliothek Lodash. Lobash will die Entwicklung von Bash-Tools zum einen effizienter gestalten, zum anderen die kleinen, nervigen Unterschiede verschiedener Plattformen ausgleichen – wer mal unter Windows, mal unter Linux und dann vielleicht mit Busybox arbeitet, kennt das vermutlich.

Technisch ist Lobash simpel gehalten: Zunächst wird eine persönliche Lobash-Datei über das mitgelieferte Build-Skript erstellt, anschließend im eigenen Skript geladen und schon stehen alle Module mit dem Präfix „l.“ zur Verfügung. Beispiel: Der echo-Befehl lässt sich nicht portabel über alle Systeme nutzen, da er sich bisweilen unterschiedlich und problematisch verhält – Lobash korrigiert das über die Alternative „l.echo“.

Lobash bietet etliche solcher kleinen Optimierungen bezüglich Geschwindigkeit, Sicherheit und auch Komfort (etwa beim Verarbeiten von Strings). Insofern ist Lobash weniger eine Wundertüte mit neuen Funktionen als ein cleverer Optimierer für produktiv genutzte Skripte.

Oh My Bash

Oh My Bash bezeichnet sich selbst als Framework für die Verwaltung der Bash-Konfiguration – bietet darüber hinaus aber auch sechs Plugins mit Hunderten von Funktionen und Aliassen. Die Plugins werden einzeln über die „.bashrc“ geladen, anschließend stehen beispielsweise mehrere Dutzend Kürzel für Git zur Verfügung.

Ein Schwerpunkt liegt auch auf den Themes: Über 53 per Screenshot dokumentierte Terminal-Designs bieten Raum für Individualität! Übrigens: Der Name verrät es: Oh My Bash basiert auf dem bekannten Projekt „Oh My Zsh“.

Bash-it

Bash-it geht ebenfalls auf Oh My Zsh zurück und liefert einen entsprechenden Funktionsumfang. Allerdings finden sich bei Bash-it deutlich mehr unterschiedliche Plug-ins als bei Oh My Bash. Interessant ist der Bereich für „Custom Content“ in der Dokumentation, der zeigt, wie eigene Skripte, Themes und so weiter in das Bash-it-Framework eingebaut werden können. Insgesamt ist die Dokumentation aber leider arg rudimentär, einsteigerfreundlich ist das Ganze nicht.

Bash Infinity

Bash Infinity sieht man auch mal als „Bash ∞“ – eine Anspielung auf Objektorientierung, die diese Framework- und Bibliothekskombination der Bash spendiert. Bash Infinity ist die vielleicht beste Wahl für Entwickler, die firm in Sprachen wie C# oder Java sind. Zudem gibt es noch weitere professionelle Features, etwa automatische Fehlerbehandlung, eine try-catch-Implementierung, koloriertes Logging, Unit-Testing ähnlich zu BATS oder benamte Parameter für Funktionen – was allein schon die Installation wert wäre.

Shellfire

Wie bereits erwähnt, sind einige Projekte etwas in die Jahre gekommen, bei shellfire sind es geschlagene sieben Jahre seit dem letzten Commit – da ist dann doch etwas Vorsicht angesagt. Allerdings sind Bash und POSIX nicht gerade tagesaktuellen Änderungen unterworfen. Shellfire ist ein Framework zum Entwickeln modularer, POSIX-kompatibler Anwendungen, das Shell-übergreifend einheitlich funktioniert, also nicht nur für die Bash gedacht ist.

Das Schöne an Shellfire: Die (auch eigenen) Module sind schlicht speziell formatierte Github-Repositories, was das Handling sehr angenehm macht. Die Feature-Liste von shellfire ist ziemlich lang, auch hier gibt es Tools für Tests, Vereinheitlichung, Umgang mit Variablen, Parser, Git-Anbindung, JSON-Werkzeuge und so weiter. Vor allem aber bringt shellfire Skripte mit, um die eigenen Skripte als Standalone-Anwendungen zu bauen – auch in Form von Paketen für zum Beispiel Debian.

Zum Schluss noch ein Wort zu eXtension of baSH, kurz xsh: Dabei handelt es sich um ein recht schlankes Framework zum Erstellen eigener Bibliotheken, die wie bei Shellfire schlicht in Form von Github-Repositories gebaut werden. Xsh ist nicht so umfangreich wie einige andere hier vorgestellten Projekte, aber sehr interessant für alle, die weniger nach fertigen Funktionen suchen, sondern eher die eigenen Skripte, Aliasse und Snippets in eine ordentliche Form bringen wollen – also zum Beispiel teil- und updatebar. Wie genau das geht, zeigen wir Ihnen in einem separaten Beitrag.

(ID:48462032)