
Brush ist eine Kommandozeilen-Shell, die in Rust geschrieben wurde und POSIX- sowie Bash-KompatibilitĂ€t mit Speicherćźć šheitsgarantien und LeistungsfĂ€higkeit kombiniert. Das Projekt zielt darauf ab, eine vollwertige Alternative zu traditionellen Shells zu bieten, die es ermöglicht, vorhandene Skripte nahezu ohne Ănderungen auszufĂŒhren und .bashrc zu nutzen. Diese Version vereint mehrere Monate Arbeit und ĂŒber 200 zusammengefĂŒhrte Pull-Requests, was die Shell erheblich auf dem Weg zu einem vollwertigen Ersatz von Bash und POSIX-kompatiblen Umgebungen voranbringt.
Hauptentwicklungsrichtungen in dieser Veröffentlichung:
- Bash-KompatibilitĂ€t: hinzugefĂŒgt wurden set -e, set -u, pipefail, failglob, ERROR-Handler, Co-Prozesse und vieles mehr;
- ZuverlĂ€ssigkeit: verbesserte Verarbeitung von AusnahmefĂ€llen â geschlossene KanĂ€le, fehlerhafte Ausgaben, nicht-UTF8-Historien und anderen;
- Plattformen: erweiterte UnterstĂŒtzung fĂŒr macOS (Einsatz als Login-Shell), verbesserte FunktionalitĂ€t unter Windows, FreeBSD, Android und 32-Bit-Systemen;
- InteraktivitĂ€t: optionale TOML-Konfigurationen, preexec/precmd-Hooks hinzugefĂŒgt, verbesserte UnterstĂŒtzung von Readline-Makros und mehr.
Wesentliche Verbesserungen der Bash-KompatibilitÀt
Die wichtigsten Ăberarbeitungen dieser Veröffentlichung umfassten eine signifikante Erweiterung der Bash-Funktionen. Fehlerverwaltung:
- set -e (errexit) â sofortiger Ausstieg bei Fehlern;
- set -u (nounset) â Fehler bei Zugriff auf nicht deklarierte Variablen;
- pipefail â Der RĂŒckgabewert der Pipeline wird durch den letzten gescheiterten Befehl definiert;
- failglob â Abwesenheit von Ăbereinstimmungen fĂŒr das Glob-Muster fĂŒhrt nun zu einem Fehler.
Handler (Traps) und Co-Prozesse:
- ERROR-Handler â ermöglicht die AusfĂŒhrung von Befehlen bei Auftreten eines Fehlers;
- Co-Prozesse (coproc) â AusfĂŒhrung von Hintergrundprozessen mit bidirektionaler Kommunikation.
Eingebaute Befehle:
- verbesserte Verarbeitung vieler arithmetischer Konstruktionen, einschlieĂlich Literale mit hoher Basis, ĂberlĂ€ufe und Zuweisungsoperatoren;
- Korrekturen und Verbesserungen betrafen die eingebauten Befehle: caller, read, getopts, printf und andere.
Erweiterung der PlattformunterstĂŒtzung:
Die Veröffentlichung v0.4.0 macht die Shell auf einem breiteren Spektrum von GerĂ€ten verfĂŒgbar:
- macOS: behobenes Problem, das dazu fĂŒhrte, dass die Shell beim Anmelden hĂ€ngen blieb. Jetzt kann Brush als Login-Shell verwendet werden;
- Windows: Verbesserungen bei der Handhabung von Pfaden, hinzugefĂŒgt wurde eine Emulation von /dev/null, die die Benutzerfreundlichkeit unter Windows erheblich verbessert;
- FreeBSD und Android: UnterstĂŒtzung fĂŒr diese Plattformen wird bereitgestellt;
Interaktive Funktionen und API
- Konfiguration: UnterstĂŒtzung fĂŒr eine optionale TOML-Konfigurationsdatei (~\/config\/brush\/config.toml) fĂŒr spezifische Brush-Einstellungen hinzugefĂŒgt;
- Anpassung: Zsh-Stile fĂŒr preexec\/precmd-Hooks implementiert (unter experimentellem Flag), nĂŒtzlich zur Erstellung benutzerdefinierter Eingabeaufforderungen und Zeitmessungswerkzeuge;
- API fĂŒr Entwickler: Typ Shell ist jetzt parametrisiert durch Erweiterungen (ShellExtensions), was Entwicklern ermöglicht, eigene integrierte Befehle hinzuzufĂŒgen und das Verhalten von Variablen zu Ă€ndern, ohne das Projekt forken zu mĂŒssen;
- Verschiedenes:
- Möglichkeiten zur Serialisierung von AST und Shell-ZustĂ€nden ĂŒber Serde hinzugefĂŒgt;
- Jetzt sind Serde-Funktionen zur Serialisierung von AST und Shell-ZustĂ€nden in brush-parser und brush-core verfĂŒgbar.
Quelle: linux.org.ru
