
Brush è una shell di comando scritta in Rust, che combina la compatibilità con POSIX e Bash con garanzie di sicurezza della memoria e prestazioni elevate. Il progetto mira a diventare un'alternativa completa alle tradizionali shell, consentendo di eseguire script esistenti e utilizzare .bashrc praticamente senza modifiche. Questa versione unisce diversi mesi di lavoro e oltre 200 pull request unite, spingendo significativamente la shell verso una sostituzione completa di Bash e degli ambienti compatibili con POSIX.
Le principali aree 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 UTF-8 e altro;
- piattaforme: ampliato il supporto per macOS (funzionamento come shell di accesso), migliorato il funzionamento su Windows, FreeBSD, Android e sistemi a 32 bit;
- interattività: aggiunti configurazioni TOML opzionali, hook preexec/precmd, migliorato il supporto per i macro readline e altro.
Miglioramenti chiave della compatibilità con Bash
Le principali modifiche di questa versione includono un significativo ampliamento del supporto per le funzionalità di Bash. Gestione degli errori:
- set -e (errexit) – uscita immediata in caso di errore;
- set -u (nounset) – errore nel tentativo di accedere a una variabile non dichiarata;
- pipefail – il codice di ritorno della pipeline è determinato dall'ultimo comando che ha fallito;
- failglob – l'assenza di corrispondenze per l'espressione glob ora porta a un errore.
Gestori (Traps) e coprocessi:
- gestore ERR — consente di eseguire comandi in caso di errore;
- coprocessi (coproc) — esecuzione di processi in background con comunicazione bidirezionale.
Comandi incorporati:
- migliorata la gestione di molte costruzioni aritmetiche, tra cui letterali ad alta base, overflow e operatori di assegnazione;
- correzioni e miglioramenti hanno riguardato i comandi incorporati: caller, read, getopts, printf e altri.
Espansione del supporto per le piattaforme:
La versione v0.4.0 rende la shell accessibile su una gamma più ampia di dispositivi:
- macOS: risolto un problema che causava il blocco della shell al momento del login. Ora brush può essere utilizzata come shell di accesso (login shell);
- Windows: miglioramenti nella gestione dei percorsi, aggiunta l'emulazione /dev/null, che aumenta notevolmente la facilità d'uso su Windows;
- FreeBSD e Android: supporto per la compilazione su queste piattaforme;
Funzionalità interattive e API
- Configurazione: aggiunto supporto per un file di configurazione TOML opzionale (~/.config/brush/config.toml) per impostazioni specifiche di brush;
- Personalizzazione: implementati stili preexec/precmd di 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), offrendo agli sviluppatori la possibilità di aggiungere comandi integrati personalizzati e modificare il comportamento delle variabili senza la necessità 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
