Brush v0.4.0

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), предоставляя разработчикам возможность добавлять собственные встроенные команды и изменять поведение переменных без необходимости форка проекта;
- Разное:
- улучшена поддержка макросов readline для совместимости со starship, atuin и fzf (github.com);
- добавлены возможности сериализации AST и состояния оболочки через
serde; - теперь в
brush-parserиbrush-coreдоступны функцииserdeдля возможности сериализации AST и состояния оболочки.
>>> Подробности на GitHub
