Cosa ci sarà di nuovo in bash 5


29

Stavo solo esaminando il repository ufficiale di bash (di solito non lo faccio) per qualcosa di non correlato, ma ho notato che bash 5 era già in beta. Ero solo curioso di sapere cosa sarà nuovo in Bash 5 ma non sono riuscito a trovare alcuna informazione. Qualcuno può riassumere le modifiche tra la versione 4.4 e 5 di Bash


6
È proprio lì nel CHANGESfile: git.savannah.gnu.org/cgit/bash.git/tree/…
muru

Risposte:


21

Le modifiche apportate bashtra la versione 4.4 e 5.0 (rilasciata il 07-01-2019) sono disponibili nel NEWSfile nella bashdistribuzione di origine.

Ecco un link ad esso (le modifiche sono troppo numerose per essere elencate qui).


Una breve visualizzazione mostra il termine loadable builtins. Non bashseguire il nuovo standard creato da ksh93trovare builtins migliorate attraverso PATHinvece di dare loro sempre la priorità?
schily,

@schily bash4.4 e versioni successive li usa BASH_LOADABLES_PATHe li carica da lì con enable -f builtin-name.
Kusalananda

Bene, questo sembra applicarsi al momento in cui il comando viene caricato. Che dire del passato? enablesembra una reimplementazione del ksh93comando builtinma manca la funzione di associare un percorso a ogni comando incorporato, che in ksh93genere è predefinito da /usr/ast/bin/<name>e consente di avere un controllo granulare su tutti i buiiltin.
schily,

@Kusalananda come posso ottenere un nuovo bash 5.0
Ankur Loriya

@AnkurLoriya Aspetti che il tuo distributore Unix lo spedisca come pacchetto o lo compili da fonti. I sorgenti e le istruzioni di installazione sono disponibili nella pagina GNU Bash .
Kusalananda

14

Se, come me, stai cercando le caratteristiche del titolo piuttosto che il log delle modifiche completo, questo post del manutentore, Chet Ramey, va oltre. Ecco la sezione interessante:

Questa versione corregge diversi bug eccezionali in bash-4.4 e introduce diverse nuove funzionalità. Le correzioni di bug più significative sono una revisione della risoluzione delle variabili nameref e una serie di potenziali errori di memoria fuori limite rilevati tramite fuzzing. Ci sono una serie di modifiche all'espansione di $ @ e $ * in vari contesti in cui la suddivisione delle parole non viene eseguita per conformarsi a un'interpretazione standard Posix e ulteriori modifiche per risolvere casi angolari per la conformità Posix.

Le nuove funzionalità più importanti sono diverse nuove variabili shell: BASH_ARGV0, EPOCHSECONDS e EPOCHREALTIME. Il builtin "history" può rimuovere intervalli di voci della cronologia e comprende gli argomenti negativi come offset dalla fine dell'elenco della cronologia. Esiste un'opzione per consentire alle variabili locali di ereditare il valore di una variabile con lo stesso nome in un ambito precedente. Esiste una nuova opzione di shell che, se abilitata, fa sì che la shell tenti di espandere gli abbonamenti di array associativi solo una volta (questo è un problema quando vengono utilizzati nelle espressioni aritmetiche). L'opzione shell `globasciiranges 'è ora abilitata di default; può essere disattivato per impostazione predefinita al momento della configurazione.

Ci sono alcune modifiche incompatibili tra bash-4.4 e bash-5.0. Le modifiche al modo in cui vengono risolte le variabili di nameref significano che alcuni usi di nameref si comporteranno in modo diverso, anche se ho cercato di minimizzare i problemi di compatibilità. Per impostazione predefinita, la shell imposta BASH_ARGC e BASH_ARGV all'avvio solo se è abilitata la modalità di debug estesa; è stata una svista che è stata impostata incondizionatamente e ha causato problemi di prestazioni quando gli script sono stati sottoposti a un gran numero di argomenti.

Si riferisce anche a questi due file, nel caso volessi di più:

  • NOVITÀ : maggiori dettagli (anche nella risposta di Kusalananda)
  • CAMBIAMENTI : la maggior parte dei dettagli

5

Il builtin "history" può rimuovere intervalli di voci della cronologia e comprende gli argomenti negativi come offset dalla fine dell'elenco della cronologia.

Esempio di eliminazione di un intervallo:

history -d 123-130

o eliminando gli ultimi 10:

history -d -10--1

Estratto dalla pagina man di Bash 5 :

'storia'

Le opzioni, se fornite, hanno i seguenti significati:

'-d OFFSET' Elimina la voce della cronologia nella posizione OFFSET. Se OFFSET è positivo, deve essere specificato come appare quando viene visualizzata la cronologia. Se OFFSET è negativo, viene interpretato come relativo a uno maggiore dell'ultima posizione della cronologia, quindi gli indici negativi contano alla fine della cronologia e un indice di '-1' si riferisce all'attuale comando 'history -d'.

'-d START-END' Elimina le voci della cronologia tra le posizioni START e END, incluso. I valori positivi e negativi per START e END sono interpretati come descritto sopra.

Vedi la mia risposta correlata: eliminare un intervallo di cronologia bash

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.