¿Qué va a ser nuevo en bash 5?

29

Solo estaba revisando el repositorio oficial de bash (generalmente no hago esto) por algo que no está relacionado, pero noté que bash 5 ya estaba en beta. Tenía curiosidad por saber qué será nuevo en bash 5 pero no pude encontrar ninguna información. ¿Alguien puede resumir los cambios entre la versión 4.4 y 5 de Bash

akabhirav
fuente
66
Está justo allí en el CHANGESarchivo: git.savannah.gnu.org/cgit/bash.git/tree/…
muru

Respuestas:

21

Los cambios realizados bashentre la versión 4.4 y 5.0 (lanzada el 07-01-2019) se pueden encontrar en el NEWSarchivo en la bashdistribución de origen.

Aquí hay un enlace (los cambios son demasiado numerosos para enumerarlos aquí).

Kusalananda
fuente
Una vista corta muestra el término loadable builtins. ¿ Sigue bashel nuevo estándar establecido ksh93para encontrar mejoras incorporadas a través de en PATHlugar de darles siempre prioridad?
schily
@schily bash4.4 y versiones posteriores los usa BASH_LOADABLES_PATHy carga desde allí con enable -f builtin-name.
Kusalananda
Bueno, esto parece aplicarse al momento en que se carga el comando. ¿Qué pasa con el tiempo pasado? enableparece una reimplementación del ksh93comando, builtinpero pierde la característica de asociar una ruta a cada comando incorporado, que ksh93generalmente está predefinido /usr/ast/bin/<name>y permite tener un control de grano fino sobre todos los componentes incorporados.
schily
@Kusalananda, ¿cómo puedo obtener una nueva fiesta 5.0?
Ankur Loriya
@AnkurLoriya Espera hasta que su distribuidor de Unix lo envíe como un paquete, o lo compile usted mismo de las fuentes. Las fuentes y las instrucciones de instalación están disponibles en la página GNU Bash .
Kusalananda
14

Si usted, como yo, está buscando las características principales en lugar del registro de cambios completo, esta publicación del mantenedor, Chet Ramey, lo repasa. Aquí está la sección interesante:

Esta versión corrige varios errores pendientes en bash-4.4 e introduce varias características nuevas. Las correcciones de errores más importantes son una revisión de cómo se resuelven las variables nameref y una serie de posibles errores de memoria fuera de los límites descubiertos mediante fuzzing. Hay una serie de cambios en la expansión de $ @ y $ * en varios contextos donde la división de palabras no se realiza para cumplir con una interpretación estándar de Posix, y cambios adicionales para resolver casos de esquina para la conformidad de Posix.

Las nuevas características más notables son varias variables de shell nuevas: BASH_ARGV0, EPOCHSECONDS y EPOCHREALTIME. El "historial" integrado puede eliminar rangos de entradas de historial y entiende los argumentos negativos como compensaciones desde el final de la lista de historial. Hay una opción para permitir que las variables locales hereden el valor de una variable con el mismo nombre en un ámbito anterior. Hay una nueva opción de shell que, cuando está habilitada, hace que el shell intente expandir los subíndices de matriz asociativa solo una vez (esto es un problema cuando se usan en expresiones aritméticas). La opción de shell `globasciiranges 'ahora está habilitada por defecto; puede establecerse en apagado de forma predeterminada en el momento de la configuración.

Hay algunos cambios incompatibles entre bash-4.4 y bash-5.0. Los cambios en cómo se resuelven las variables nameref significan que algunos usos de namerefs se comportarán de manera diferente, aunque he tratado de minimizar los problemas de compatibilidad. De manera predeterminada, el shell solo establece BASH_ARGC y BASH_ARGV al inicio si el modo de depuración extendida está habilitado; fue un descuido que se estableció incondicionalmente y causó problemas de rendimiento cuando los scripts pasaron una gran cantidad de argumentos.

También se refiere a estos dos archivos, en caso de que desee más:

  • NOTICIAS : más detalles (también en la respuesta de Kusalananda)
  • CAMBIOS : más detalles
Jacktose
fuente
5

El "historial" integrado puede eliminar rangos de entradas de historial y entiende los argumentos negativos como compensaciones desde el final de la lista de historial.

Ejemplo sobre la eliminación de un rango:

history -d 123-130

o eliminando los últimos 10:

history -d -10--1

Extracto de la página de manual de Bash 5 :

'historia'

Las opciones, si se proporcionan, tienen los siguientes significados:

'-d OFFSET' Elimina la entrada del historial en la posición OFFSET. Si OFFSET es positivo, debe especificarse tal como aparece cuando se muestra el historial. Si OFFSET es negativo, se interpreta como relativo a uno mayor que la última posición del historial, por lo que los índices negativos cuentan desde el final del historial, y un índice de '-1' se refiere al comando 'history -d' actual.

'-d START-END' Elimina las entradas del historial entre las posiciones START y END, inclusive. Los valores positivos y negativos para START y END se interpretan como se describe anteriormente.

Ver mi respuesta relacionada: Eliminar un rango del historial de bash

David Hatch
fuente