Was wird neu in Bash 5?


29

Ich habe gerade das offizielle Bash-Repository durchgesehen (normalerweise mache ich das nicht), um etwas anderes zu finden, aber festgestellt, dass Bash 5 bereits in der Beta-Phase war. Ich war nur neugierig, was in Bash 5 neu sein wird, konnte aber keine Informationen finden. Kann jemand die Änderungen zwischen Version 4.4 und Version 5 von Bash zusammenfassen


6
Es ist genau dort in der CHANGESDatei: git.savannah.gnu.org/cgit/bash.git/tree/…
muru

Antworten:


21

Die Änderungen bashzwischen Release 4.4 und 5.0 (Release 2019-01-07) finden Sie in der NEWSDatei in der Quelldistribution bash.

Hier ist ein Link dazu (die Änderungen sind zu zahlreich, um sie hier aufzulisten).


Eine kurze Ansicht zeigt den Begriff loadable builtins. Hat bashfolgen den neuen Standard von eingerichtet ksh93zu einer verbesserten builtins finden über , PATHanstatt sie immer Vorrang zu geben?
Schily

@schily bash4.4 und höher benutzt BASH_LOADABLES_PATHund lädt sie von dort mit enable -f builtin-name.
Kusalananda

Nun, dies scheint auf den Zeitpunkt zuzutreffen, zu dem der Befehl geladen wird. Was ist mit der Zeit danach? enableEs sieht aus wie eine Neuimplementierung des ksh93Befehls builtin, es fehlt jedoch die Funktion, jedem eingebauten Befehl einen Pfad zuzuordnen, der ksh93normalerweise durch vordefiniert ist /usr/ast/bin/<name>und eine fein abgestimmte Kontrolle über alle Gebäude ermöglicht.
Schily

@Kusalananda wie bekomme ich eine neue Bash 5.0
Ankur Loriya

@AnkurLoriya Sie warten, bis Ihr Unix-Distributor es als Paket versendet, oder Sie kompilieren es selbst aus Quellen. Die Quellen und Installationsanweisungen finden Sie auf der GNU Bash-Seite .
Kusalananda

14

Wenn Sie, wie ich, eher nach den Überschriften als nach dem vollständigen Änderungsprotokoll suchen , geht dieser Beitrag des Betreuers Chet Ramey darüber hinaus. Hier ist der interessante Abschnitt:

Diese Version behebt mehrere ausstehende Fehler in Bash-4.4 und führt mehrere neue Funktionen ein. Die wichtigsten Fehlerkorrekturen sind eine Überarbeitung der Auflösung von nameref-Variablen und eine Reihe potenzieller Speicherfehler außerhalb der Grenzen, die durch Fuzzing entdeckt wurden. Es gibt eine Reihe von Änderungen an der Erweiterung von $ @ und $ * in verschiedenen Kontexten, in denen keine Wortteilung durchgeführt wird, um einer Posix-Standardinterpretation zu entsprechen, sowie zusätzliche Änderungen, um Eckfälle für die Posix-Konformität aufzulösen.

Die bemerkenswertesten neuen Funktionen sind mehrere neue Shell-Variablen: BASH_ARGV0, EPOCHSECONDS und EPOCHREALTIME. Der eingebaute "Verlauf" kann Bereiche von Verlaufseinträgen entfernen und negative Argumente als Offsets am Ende der Verlaufsliste verstehen. Es gibt eine Option, mit der lokale Variablen den Wert einer Variablen mit demselben Namen in einem vorhergehenden Bereich erben können. Es gibt eine neue Shell-Option, bei deren Aktivierung die Shell versucht, assoziative Array-Indizes nur einmal zu erweitern (dies ist ein Problem, wenn sie in arithmetischen Ausdrücken verwendet werden). Die Shell-Option "globasciiranges" ist jetzt standardmäßig aktiviert. Sie kann bei der Konfiguration standardmäßig deaktiviert werden.

Es gibt einige inkompatible Änderungen zwischen bash-4.4 und bash-5.0. Die Änderungen an der Auflösung von nameref-Variablen bedeuten, dass sich einige Verwendungen von namerefs anders verhalten, obwohl ich versucht habe, die Kompatibilitätsprobleme zu minimieren. Standardmäßig setzt die Shell BASH_ARGC und BASH_ARGV beim Start nur, wenn der erweiterte Debugging-Modus aktiviert ist. Es war ein Versehen, dass es bedingungslos gesetzt wurde und zu Leistungsproblemen führte, wenn Skripten eine große Anzahl von Argumenten übergeben wurden.

Er verweist auch auf diese beiden Dateien, falls Sie mehr wollen:

  • NEWS : mehr Details (auch in Kusalanandas Antwort)
  • ÄNDERUNGEN : die meisten Details

5

Der eingebaute "Verlauf" kann Bereiche von Verlaufseinträgen entfernen und negative Argumente als Offsets am Ende der Verlaufsliste verstehen.

Beispiel zum Löschen eines Bereichs:

history -d 123-130

oder die letzten 10 löschen:

history -d -10--1

Auszug aus Bash 5 Man Page :

'Geschichte'

Optionen haben, falls mitgeliefert, folgende Bedeutung:

'-d OFFSET' Löscht den Verlaufseintrag an Position OFFSET. Wenn OFFSET positiv ist, sollte angegeben werden, wie es bei der Anzeige des Verlaufs angezeigt wird. Wenn OFFSET negativ ist, wird es als relativ zu einer größeren als der letzten Verlaufsposition interpretiert, sodass negative Indizes ab dem Ende des Verlaufs zurückgezählt werden und ein Index von '-1' auf den aktuellen Befehl 'history -d' verweist.

'-d START-ENDE' Löscht die Historieneinträge zwischen den Positionen START und ENDE, einschließlich. Positive und negative Werte für START und ENDE werden wie oben beschrieben interpretiert.

Siehe meine verwandte Antwort: Löschen Sie einen Bereich des Bash-Verlaufs

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.