
Brush è una shell scritta in Rust che unisce la compatibilità con POSIX e Bash con garanzie di sicurezza della memoria e prestazioni elevate. Il progetto mira a diventare un'alternativa completa alle shell tradizionali, permettendo di eseguire script esistenti e utilizzare .bashrc con poche o nessuna modifica. Questa versione combina mesi di lavoro e oltre 200 pull request unite, progredendo significativamente verso una sostituzione completa di Bash e ambienti compatibili con POSIX.
Le principali direzioni di sviluppo in questa release:
- compatibilità con Bash: aggiunti set -e, set -u, pipefail, failglob, gestore ERR, subprocessi e molto altro;
- affidabilità: migliorata la gestione dei casi eccezionali – canali chiusi, output danneggiato, cronologia non UTF8 e altro;
- piattaforme: supporto ampliato per macOS (funzionamento come shell di accesso), migliorato funzionamento su Windows, FreeBSD, Android e sistemi a 32 bit;
- interattività: aggiunti configurazioni TOML opzionali, hook preexec/precmd, migliorato supporto per le macro readline e altro.
Miglioramenti chiave nella compatibilità con Bash
Le modifiche più significative di questa versione sono state l'espansione significativa del supporto delle funzionalità di Bash. Gestione degli errori:
- set -e (errexit) – uscita immediata in caso di errore;
- set -u (nounset) – errore nell'accesso a variabili non dichiarate;
- pipefail – il codice di ritorno della pipeline è definito dall'ultimo comando fallito;
- failglob – l'assenza di corrispondenze per un'espressione glob ora porta a un errore.
Gestori (Traps) e subprocessi:
- gestore ERR – consente di eseguire comandi in caso di errore;
- subprocessi (coproc) – avvio di processi in background con comunicazione bidirezionale.
Comandi incorporati:
- migliorata la gestione di molte costruzioni aritmetiche, inclusi letterali con basi elevate, overflow e operatori di assegnazione;
- correzioni e miglioramenti hanno coinvolto comandi incorporati: caller, read, getopts, printf e altri.
Espansione del supporto alle piattaforme:
La release v0.4.0 rende la shell disponibile su un'ampia gamma di dispositivi:
- macOS: risolto un problema che causava il blocco della shell durante il login. Ora brush può essere utilizzato come shell di accesso (login shell);
- Windows: miglioramenti nella gestione dei percorsi, aggiunta l'emulazione di /dev/null, il che aumenta notevolmente la facilità d'uso su Windows;
- FreeBSD e Android: è supportata la compilazione per queste piattaforme;
Funzionalità interattive e API
- Configurazione: è stato aggiunto il supporto per un file di configurazione TOML opzionale (~/.config/brush/config.toml) per impostazioni specifiche di brush;
- Personalizzazione: sono stati implementati gli hook preexec/precmd di stile zsh (dietro un flag sperimentale), utili per la creazione di prompt personalizzati e strumenti di misurazione del tempo;
- API per sviluppatori: il tipo Shell è ora parametrizzato da estensioni (ShellExtensions), permettendo agli sviluppatori di aggiungere comandi integrati propri e modificare il comportamento delle variabili senza bisogno di forkare il progetto;
- Varie:
- aggiunte funzionalità di serializzazione AST e stato della shell tramite serde;
- ora in brush-parser e brush-core sono disponibili funzioni serde per la serializzazione di AST e stato della shell.
Fonte: linux.org.ru
