
Brush е команден шел, написан на Rust, който съчетава съвместимост с POSIX и Bash с гаранции за безопасност на паметта и производителност. Проектът е насочен към това да стане пълноценна алтернатива на традиционните шелове, позволявайки изпълнението на съществуващи скриптове и използването на .bashrc почти без промени. Тази версия обединява няколко месеца работа и повече от 200 обединени пулл реквести, значително напредвайки по пътя на заместването на Bash и POSIX-съвместими среди.
Основни направления на развитие в този релиз:
- съвместимост с Bash: добавени set -e, set -u, pipefail, failglob, обработчик ERR, сопроцеси и много други;
- надеждност: подобрена обработка на изключителни случаи – затворени канали, повреден изход, не-UTF8 история и други;
- платформи: разширена поддръжка за macOS (работа като влязъл шел), подобрено функциониране на Windows, FreeBSD, Android и 32-битови системи;
- интерактивност: добавени опционални TOML конфигурации, preexec/precmd хукове, подобрена поддръжка на макроси readline и друго.
Ключови подобрения в съвместимостта с Bash
Най-важните доработки в този релиз са значително разширяване на поддръжката на възможностите на Bash. Управление на грешките:
- set -e (errexit) – незабавно излизане при грешка;
- set -u (nounset) – грешка при опит за достъп до неустановена променлива;
- pipefail – кодът на връщане на конвейера се определя от последната провалена команда;
- failglob – липсата на съвпадения за glob-израз сега води до грешка.
Обработчици (Traps) и сопроцеси:
- обработчик ERR – позволява изпълнение на команди при възникване на грешка;
- сопроцеси (coproc) – стартиране на фонови процеси с двустранна връзка.
Вградените команди:
- подобрена обработка на много аритметични конструкции, включително литерали с висока основа, препълвания и оператори за присвояване;
- поправки и подобрения засегнаха вградените команди: caller, read, getopts, printf и други.
Разширяване на поддръжката на платформи:
Релиз v0.4.0 прави шела достъпен на по-широк спектър от устройства:
- macOS: решен е проблем, при който шелът зацикляше при влизане. Сега brush може да се използва като входен шел (login shell);
- Windows: подобрения в обработката на пътища, добавена е емулация на /dev/null, което значително повишава удобството на ползване на Windows;
- FreeBSD и Android: поддържа се изграждане за тези платформи;
Интерактивни възможности и API
- Конфигурация: добавена е поддръжка на опционалния TOML конфигурационен файл (~/.config/brush/config.toml) за настройки, специфични за brush;
- Персонализация: реализирани са zsh стилове за preexec/precmd хукове (при експерименталния флаг), полезни за създаване на персонализирани покани и инструменти за измерване на време;
- API за разработчици: тип Shell сега е параметризирано с разширения (ShellExtensions), предоставяйки на разработчиците възможност да добавят свои собствени вградени команди и да променят поведението на променливите без необходимост от форкване на проекта;
- Разнообразно:
- добавени са възможности за сериализация на AST и състоянието на командната оболочка чрез serde;
- сега в brush-parser и brush-core са налични функции serde за сериализация на AST и състоянието на командната оболочка.
Източник: linux.org.ru
