
Brush es un shell de comandos escrito en Rust, que combina compatibilidad con POSIX y Bash con garantías de seguridad de memoria y rendimiento. El proyecto tiene como objetivo convertirse en una alternativa completa a los shells tradicionales, permitiendo la ejecución de scripts existentes y el uso de .bashrc prácticamente sin cambios. Esta versión amalgama varios meses de trabajo y más de 200 solicitudes de extracción combinadas, impulsando significativamente el shell hacia un reemplazo completo de Bash y entornos compatibles con POSIX.
Principales áreas de desarrollo en esta versión:
- compatibilidad con Bash: se han añadido set -e, set -u, pipefail, failglob, manejador ERR, coprocessos y mucho más;
- fiabilidad: se ha mejorado el manejo de excepciones - canales cerrados, salida corrupta, historial no UTF-8 y otros;
- plataformas: se ha ampliado el soporte para macOS (funcionando como shell de inicio), mejorado el rendimiento en Windows, FreeBSD, Android y sistemas de 32 bits;
- interactividad: se han añadido configuraciones opcionales TOML, ganchos preexec/precmd, mejorado el soporte de macros readline y más.
Principales mejoras en la compatibilidad con Bash
Las actualizaciones más significativas de esta versión incluyen una ampliación considerable del soporte de las funcionalidades de Bash. Manejo de errores:
- set -e (errexit) - salida inmediata en caso de error;
- set -u (nounset) - error al referirse a una variable no declarada;
- pipefail - el código de retorno de la tubería se determina por el último comando fallido;
- failglob - la ausencia de coincidencias para una expresión glob ahora resulta en un error.
Manejadores (Traps) y coprocessos:
- manejador ERR - permite ejecutar comandos cuando ocurre un error;
- coprocessos (coproc) - iniciando procesos en segundo plano con comunicación bidireccional.
Comandos internos:
- se ha mejorado el manejo de muchas construcciones aritméticas, incluidos literales con bases altas, desbordamientos y operadores de asignación;
- se han realizado correcciones y mejoras en comandos internos: caller, read, getopts, printf y otros.
Ampliación del soporte de plataformas:
La versión v0.4.0 hace que el shell esté disponible en una gama más amplia de dispositivos:
- macOS: se ha solucionado un problema que hacía que el shell se bloquease al iniciar sesión. Ahora brush se puede usar como shell de inicio (login shell);
- Windows: mejoras en el manejo de rutas, se ha añadido la emulación de /dev/null, lo que mejora significativamente la usabilidad en Windows;
- FreeBSD y Android: se soporta una compilación para estas plataformas;
Funciones interactivas y API
- Configuración: se ha añadido soporte para un archivo de configuración TOML opcional (~/.config/brush/config.toml) para ajustes específicos de brush;
- Personalización: se implementaron estilos zsh preexec/precmd hooks (bajo una bandera experimental), útiles para crear invitaciones personalizadas y herramientas de medición de tiempo;
- API para desarrolladores: el tipo Shell ahora está parametrizado por extensiones (ShellExtensions), lo que permite a los desarrolladores agregar sus propios comandos integrados y modificar el comportamiento de las variables sin necesidad de bifurcar el proyecto;
- Varios:
- se añadieron capacidades de serialización de AST y estado de la shell a través de serde;
- ahora en brush-parser y brush-core se encuentran funciones serde para permitir la serialización de AST y estado de la shell.
Fuente: linux.org.ru
