Esistono decine di emulatori di terminale per i sistemi Unix-like, ma il progetto più diffuso e famoso è sicuramente Bash. Acronimo di bourne again shell questo software fa parte del progetto GNU ed ecco perché viene utilizzato nella quasi totalità della distribuzioni GNU/Linux.
Bash dispone di una completa implementazione delle specifiche della shell POSIX oltre ad un sistema di interactive command line editing, del job control e di diverse feature csh-like come ad esempio la history substitution e la brace expansion. In questi giorni il suo team di sviluppo ha annunciato il rilascio di una nuova major release: Bash 5.0. La prima versione di Bash risale al 1989 mentre la precedente versione stabile è stata rilasciata ben due anni fa.
Questa release corregge diversi bug presenti in bash-4.4 e introduce alcune nuove caratteristiche. Il team di sviluppo ha eseguito una revisione di come le variabili nameref
si risolvono e ha analizzato il numero dei potenziali diout-of-bounds memory error
scoperti tramite la tecnica di fuzzing.
Sono state introdotte anche un certo numero di modifiche all'espansione di $@
e $*
nei vari contesti in cui la suddivisione di parole non viene eseguita in modo conforme all'interpretazione standard Posix.
Bash 5.0 include anche delle nuove variabili shell, ovvero: BASH_ARGV0
, EPOCHSECONDS
e EPOCHREALTIME
. Il file history
incorporato può rimuovere intervalli di voci della cronologia e include anche gli argomenti negativi come gli offset dalla fine della lista della cronologia.
È presente una nuova opzione per consentire alle variabili locali di ereditare il valore di una variabile con lo stesso nome in un ambito precedente. Arrivata anche una nuova feature che permette alla shell di tentare di espandere gli indici associativi dell'array una sola volta (questa funzione può diventare un problema quando la si usa nelle espressioni aritmetiche). Inoltre, l'opzione globasciiranges
è ora abilitata di default anche se può essere disattivata da configuration time.
Con Bash 5.0 sono emerse alcune feature incompatibili con le vecchie versioni della shell. Malgrado il team abbia lavorato parecchio per ridurre al minimo le situazioni di incompatibilità alcune modifiche apportate al modo in cui vengono risolte le variabili di nameref
fanno in modo che in alcuni casi nameref
si comporti in modo diverso rispetto a Bash 4.4, dunque è possibile che con l'upgrade alcuni utenti possano riscontrare dei problemi con determinate funzioni.
Via GNU