it-swarm.com.de

Was wird in Bash 5 neu sein?

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

30
akxer

Die zwischen Version 4.4 und 5.0 (veröffentlicht am 07.01.2019) an bash vorgenommenen Änderungen befinden sich in der Datei NEWS in der Quelldistribution bash.

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

20
Kusalananda

Wenn Sie, wie ich, eher nach den Überschriften als nach dem vollständigen Änderungsprotokoll suchen, geht dieser Beitrag vom Betreuer Chet Ramey darüber hinweg. 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 die Wortaufteilung nicht durchgeführt wird, um einer Posix-Standardinterpretation zu entsprechen, und 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 integrierte "Verlauf" kann Bereiche von Verlaufseinträgen entfernen und versteht negative Argumente als Offsets vom Ende der Verlaufsliste. 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, die bei Aktivierung bewirkt, dass die Shell nur einmal versucht, assoziative Array-Indizes 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 zur Konfigurationszeit standardmäßig deaktiviert sein.

Es gibt einige inkompatible Änderungen zwischen bash-4.4 und bash-5.0. Die Änderungen an der Auflösung von nameref-Variablen führen dazu, 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 festgelegt wurde und Leistungsprobleme verursachte, wenn Skripten eine große Anzahl von Argumenten übergeben wurden.

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

  • NEWS : mehr Detail (auch in Kusalanandas Antwort)
  • ÄNDERT : die meisten Details
16
Jacktose

Der integrierte "Verlauf" kann Bereiche von Verlaufseinträgen entfernen und versteht negative Argumente als Offsets vom Ende der Verlaufsliste.

Beispiel zum Löschen eines Bereichs:

history -d 123-130

oder Löschen der letzten 10:

history -d -10--1

Auszug aus Bash 5 Man Page :

'Geschichte'

Optionen haben, falls vorhanden, folgende Bedeutung:

'-d OFFSET' Löscht den Verlaufseintrag an der Position OFFSET. Wenn OFFSET positiv ist, sollte es so angegeben werden, wie es angezeigt wird, wenn der Verlauf angezeigt wird. Wenn OFFSET negativ ist, wird es als relativ zu einer Position interpretiert, die größer als die letzte Verlaufsposition ist. Daher zählen negative Indizes ab dem Ende des Verlaufs zurück, und ein Index von '-1' bezieht sich auf den aktuellen Befehl 'history -d'.

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

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

5
David Hatch