Quoi de neuf dans bash 5

29

Je venais de parcourir le référentiel officiel de bash (je ne fais généralement pas cela) pour quelque chose de non lié, mais j'ai remarqué que bash 5 était déjà en version bêta. J'étais simplement curieux de savoir ce qui allait être nouveau dans bash 5 mais je n'ai trouvé aucune information. Quelqu'un peut-il résumer les changements entre la version 4.4 et la version 5 de Bash

akabhirav
la source
6
C'est juste là dans le CHANGESfichier: git.savannah.gnu.org/cgit/bash.git/tree/…
muru

Réponses:

21

Les modifications apportées bashentre la version 4.4 et la version 5.0 (publiée le 2019-01-07) se trouvent dans le NEWSfichier de la bashdistribution source.

En voici un lien (les modifications sont trop nombreuses pour être listées ici).

Kusalananda
la source
Une courte vue montre le terme loadable builtins. Ne bashsuivez la nouvelle norme mis en place par ksh93trouver builtins évolués via au PATHlieu de leur donner toujours la priorité?
schily
@schily bash4.4 et versions ultérieures les utilise BASH_LOADABLES_PATHet les charge à partir de là avec enable -f builtin-name.
Kusalananda
Eh bien, cela semble s'appliquer au moment où la commande est chargée. Et le temps passé? enableressemble à une réimplémentation de la ksh93commande builtinmais il manque la fonctionnalité d'associer un chemin à chaque commande intégrée, qui ksh93est généralement prédéfinie par /usr/ast/bin/<name>et permet d'avoir un contrôle fin sur tous les buiiltins.
schily
@Kusalananda comment puis-je obtenir un nouveau bash 5.0
Ankur Loriya
@AnkurLoriya Vous attendez que votre distributeur Unix l'expédie en tant que package, ou vous le compilez vous-même à partir de sources. Les sources et les instructions d'installation sont disponibles sur la page GNU Bash .
Kusalananda
14

Si vous, comme moi, recherchez les fonctionnalités principales plutôt que le journal des modifications complet, ce message du responsable, Chet Ramey, passe en revue cela. Voici la section intéressante:

Cette version corrige plusieurs bogues non résolus dans bash-4.4 et introduit plusieurs nouvelles fonctionnalités. Les corrections de bogues les plus importantes sont une refonte de la façon dont les variables nameref se résolvent et un certain nombre d'erreurs de mémoire hors limites potentielles découvertes par fuzzing. Il y a un certain nombre de changements à l'expansion de $ @ et $ * dans divers contextes où le fractionnement de mots n'est pas effectué pour se conformer à une interprétation standard Posix, et des changements supplémentaires pour résoudre les cas d'angle pour la conformité Posix.

Les nouvelles fonctionnalités les plus notables sont plusieurs nouvelles variables de shell: BASH_ARGV0, EPOCHSECONDS et EPOCHREALTIME. La fonction intégrée `history 'peut supprimer des plages d'entrées d'historique et comprend les arguments négatifs comme des décalages de la fin de la liste d'historique. Il existe une option pour permettre aux variables locales d'hériter de la valeur d'une variable portant le même nom dans une étendue précédente. Il existe une nouvelle option de shell qui, lorsqu'elle est activée, fait que le shell tente de développer les indices de tableau associatif une seule fois (c'est un problème lorsqu'ils sont utilisés dans des expressions arithmétiques). L'option shell `globasciiranges 'est maintenant activée par défaut; il peut être désactivé par défaut au moment de la configuration.

Il y a quelques changements incompatibles entre bash-4.4 et bash-5.0. Les modifications apportées à la façon dont les variables nameref sont résolues signifient que certaines utilisations de nameref se comporteront différemment, bien que j'aie essayé de minimiser les problèmes de compatibilité. Par défaut, le shell définit uniquement BASH_ARGC et BASH_ARGV au démarrage si le mode de débogage étendu est activé; c'était un oubli qu'il était défini sans condition et causait des problèmes de performances lorsque les scripts recevaient un grand nombre d'arguments.

Il fait également référence à ces deux fichiers, au cas où vous en voudriez plus:

  • NOUVELLES : plus de détails (également dans la réponse de Kusalananda)
  • CHANGEMENTS : plus de détails
Jacktose
la source
5

La fonction intégrée `history 'peut supprimer des plages d'entrées d'historique et comprend les arguments négatifs comme des décalages de la fin de la liste d'historique.

Exemple de suppression d'une plage:

history -d 123-130

ou en supprimant les 10 derniers:

history -d -10--1

Extrait de Bash 5 Man Page :

'histoire'

Les options, si elles sont fournies, ont les significations suivantes:

'-d OFFSET' Supprimer l'entrée d'historique à la position OFFSET. Si OFFSET est positif, il doit être spécifié tel qu'il apparaît lorsque l'historique est affiché. Si OFFSET est négatif, il est interprété comme étant relatif à un supérieur à la dernière position de l'historique, donc les indices négatifs comptent à rebours à partir de la fin de l'historique, et un indice de «-1» fait référence à la commande «history -d» actuelle.

'-d START-END' Supprimer les entrées d'historique entre les positions START et END, inclus. Les valeurs positives et négatives pour START et END sont interprétées comme décrit ci-dessus.

Voir ma réponse connexe: supprimer une plage de l'historique de bash

David Hatch
la source