Es ist ein Zufall, dass beim Linux-Kernel und der Bash ungefähr zeitgleich der Versionssprung auf die 5 stattfand. Während Linus die Nummern nach Gutdünken vergibt, ändert die Bash ihre Version bei großen Anpassungen. Was mit Bash 5 auf den User zukommt, zeigt dieser Artikel.
Der letzte Artikel zu einem Bash-Versionswechsel ist zehn Jahre alt [1]. Damals stand Version 4 in den Startlöchern. Doch hat es noch etwas gedauert, bis alle Distributionen auf diese Version umgestellt hatten. Ohne Grund gefährdet niemand sein produktives System.
Trotzdem war damals der Umstieg für Entwickler gerade komplexerer Skripte sehr attraktiv, denn mit den assoziativen Arrays hielt eine komplett neue Datenstruktur Einzug. Die Vorteile sind elegantere, einfachere Programme, die auch besser wartbar wurden. Weitere wichtige Änderungen betrafen das »coproc«-Kommando (unterstützt die Parallelisierung) sowie die Umleitungsoperatoren.
Schatzsuche
Für die Bash 5 fällt daher der Blick zuerst auf einschlägigen Dateien wie »NEWS« und »CHANGES«, um die wichtigen Änderungen von den unwichtigen zu trennen. Diese Dateien sind von der Bash-Seite des Maintainers Chet Ramey [2] verlinkt, die dem Thema angemessen fast vollständig auf grafische Elemente verzichtet. Die Bash-Homepage auf [3] steht dem in nichts nach (Abbildung 1). Die »NEWS«-Datei listet 44 Änderungen an der Bash und weitere elf an der verwendeten Readline-Bibliothek seit der letzten stabilen Version auf. Die Informationen erschlagen durch die schiere Menge.
Bei genauerem Hinsehen fühlt man sich aber eher wie ein Goldwäscher – die Ausbeute an tatsächlichen Nuggets ist extrem gering. Selbst für den Autor, der im Laufe seines Lebens mehrere 10 000 Zeilen Bash-Code geschrieben hat und die Funktionalität der Bash in weiten Bereichen ausreizt, betreffen die meisten Änderungen eher esoterische Grenzbereiche.
Ein Beispiel sind die assoziativen Arrays. In der neuen Bash dürfen auch Strings als Schlüssel fungieren, die nur aus Leerzeichen bestehen. Sicher folgerichtig, aber keine Änderung, die Lust auf eine vorzeitige Migration macht. Eher nützlich sind die neuen Variablen »EPOCHSECONDS« und »EPOCHREALTIME«. Die erste enthält jetzt die Unix-Zeit (Sekunden seit Anfang 1970), die zweite zusätzlich die Mikrosekunden.
Wer zum Beispiel jede Sekunde Messdaten in eine RRD-Datenbank einspeist, der profitiert davon und erspart sich einen Aufruf des externen Date-Binary und damit dem Betriebssystem einen zusätzlichen Fork (Abbildung 2). Eine Liste mit den potenziell interessanten Änderungen ist in Tabelle 1 zu finden.
|
Änderung |
Anmerkung |
|---|---|
|
Neue Variable »EPOCHSECONDS« |
Sekunden seit 01.01.1970 |
|
Neue Variable »EPOCHREALTIME« |
Sekunden seit 01.01.1970 (mit Mikrosekunden) |
|
Neue Variable »BASH_ARGV0« |
Programm ($0), kann umdefiniert werden |
|
Neue Builtins: »rm«, »stat«, »fdflags«, »seq« |
Weniger Forks für externe Kommandos |
|
»history -d« mit negativen Offsets |
Löschen der History von hinten |
|
»coproc Name« expandiert jetzt Name |
Dynamische Koprozesse möglich |
|
Die Bash ist mit statischem »PATH« kompilierbar |
Für sichere Shells |
|
Assoziative und indizierte Arrays dürfen auch ausschließlich Leerzeichen im Index enthalten |
Eher eine folgerichtige Änderung als ein prickelndes Feature |
Installation
Wegen der sehr überschaubaren Anzahl an epochalen Neuerungen ist eine Installation nicht wirklich attraktiv, wer die Fünfte trotzdem ausprobieren will, kompiliert sich dazu am besten die Shell selbst. Alternativ dazu bietet der Build-Service von Open Suse diverse experimentelle und Community-Builds. Das Problem an diesen Builds ist jedoch die zusätzliche Abhängigkeit von neuen Glibc-Versionen, damit kommt eine Installation schon fast einem Komplett-Update des ganzen Systems gleich.
Nutzer der von Open Suse angebotenen Rolling-Release-Version Tumbleweed finden aber RPM-Pakete von Bash 5 und Libreadline 8 für ein einfaches Update. Auch Arch Linux stellt inzwischen ein Paket der Bash 5 bereit, weitere bekannte Linux-Distributionen dürften wohl demnächst folgen.
Außer Spesen nichts gewesen?
Angesichts der mageren Ausbeute von echten Neuerungen stellt sich die Frage, warum die Bash-Entwickler die Major-Version überhaupt geändert haben – ganz klar wird das letztlich auch nicht. Ein vielleicht entscheidender Hinweis ergibt sich durch das detaillierte Studium der einzelnen Changes. Darunter befinden sich nämlich auch einige Inkompatibilitäten zur Vorversion.
Im Gegensatz zum Linux-Kernel ist die Versionsänderung bei Kompabilitätsfragen ein Verfahren, das bei vielen Softwareprojekten üblich ist: Wird die Rückwärtskompatibilität gebrochen, erhöht das Team die Nummer vor dem Punkt. Das führt manchmal zu der Situation, dass jahrelang mehrere Versionen eine aktive Unterstützung benötigen – Python ist hier ein unrühmliches Beispiel.
Die Version 5 der Bash zeigt aber im Grunde auch, dass die Skriptsprache inzwischen ausentwickelt ist. Wie bei dem letzten Umstieg von der Bash 3 auf die Bash 4 werden die großen Distributionen in kommenden Versionen auf die aktuelle Bash aktualisieren und fast niemand wird diese Umstellung bemerken. Bis dahin dürften dann schon die gröbsten neu eingeführten Fehler behoben sein. (uba)
Infos
-
Bernhard Bablok, Nils Magnus, “Aufpoliert – Neue Funktionen in der Bash-Version 4”: Linux-Magazin 06/09, S. 46, https://www.linux-magazin.de/ausgaben/2009/06/aufpoliert/
-
Bash-Seite des Maintainers Chet Ramey: https://tiswww.case.edu/php/chet/bash/bashtop.html
-
Offizielle Bash-Homepage: https://www.gnu.org/software/bash/







