Домой Софт Brush v0.4.0: новая версия Rust-оболочки с улучшенной поддержкой Bash

Brush v0.4.0: новая версия Rust-оболочки с улучшенной поддержкой Bash

Командная оболочка на Rust получила серьезное обновление: расширенная совместимость с Bash, работа в качестве шелла входа и новые возможности для настройки.

Brush v0.4.0: новая версия Rust-оболочки с улучшенной поддержкой Bash
Brush v0.4.0: новая версия Rust-оболочки с улучшенной поддержкой Bash — иллюстрация к материалу. Источник: linux.org.ru

Brush — это современная командная оболочка, написанная на языке Rust. Проект объединяет строгое соответствие стандартам POSIX и Bash с преимуществами Rust: высокой производительностью и гарантированной безопасностью памяти. Основная цель разработчиков — создать полноценную альтернативу традиционным шеллам, которая позволит запускать существующие скрипты и использовать конфигурационные файлы .bashrc практически без правок.

Релиз версии 0.4.0 стал итогом многомесячной работы сообщества, включающей интеграцию более 200 пулл-реквестов. Это обновление значительно приближает Brush к статусу полноценной замены Bash.

Ключевые направления развития в версии 0.4.0:

  • Расширенная совместимость: добавлена поддержка set -e, set -u, pipefail, failglob, обработчиков ERR, сопроцессов и многих других механизмов.
  • Повышенная надёжность: проведена работа над ошибками при обработке нестандартных ситуаций, включая закрытые каналы, поврежденный вывод и историю, содержащую не-UTF8 символы.
  • Кроссплатформенность: улучшена поддержка macOS (включая работу в качестве шелла входа), а также оптимизирована стабильность на Windows, FreeBSD, Android и 32-битных архитектурах.
  • Интерактивность: появилась поддержка конфигурационных TOML-файлов, хуков preexec/precmd, а также расширена работа с макросами readline.

Ключевые улучшения Bash-совместимости

Важнейшим достижением этого выпуска стало внедрение критических инструментов для управления выполнением скриптов и обработки ошибок:

  • Управление ошибками: реализованы флаги set -e (немедленный выход при ошибке), set -u (ошибка при обращении к необъявленной переменной), pipefail (код возврата конвейера зависит от последней упавшей команды) и failglob (ошибка при отсутствии совпадений в glob-выражениях).
  • Обработчики и сопроцессы: добавлен обработчик ERR для выполнения команд при возникновении сбоев, а также полноценная поддержка сопроцессов (coproc) для организации двусторонней связи с фоновыми процессами.
  • Встроенные команды: существенно доработана математическая логика, включая работу с литералами с высоким основанием и исправление переполнений. Обновления затронули встроенные команды caller, read, getopts, printf и ряд других.

Расширение поддержки платформ

Новая версия делает Brush более доступным инструментом для различных операционных систем:

  • macOS: устранена ошибка, приводившая к зависанию оболочки при входе, что позволяет использовать Brush в качестве login shell.
  • Windows: оптимизирована обработка путей и добавлена эмуляция /dev/null, что делает работу с командной строкой в этой среде более естественной.
  • FreeBSD и Android: обеспечена стабильная сборка и запуск на данных платформах.

Интерактивные возможности и API

Помимо расширения функционала Bash, разработчики добавили ряд инструментов для глубокой настройки:

  • Конфигурация: теперь можно использовать файл ~/.config/brush/config.toml для индивидуальных настроек оболочки.
  • Кастомизация: реализованы экспериментальные хуки preexec/precmd (аналог Zsh), которые позволяют гибко настраивать приглашение командной строки и добавлять инструменты замера времени выполнения команд.
  • API для разработчиков: тип Shell теперь параметризован через ShellExtensions. Это позволяет сторонним разработчикам создавать собственные встроенные команды и изменять логику работы переменных без необходимости вмешательства в исходный код (форка) самого проекта.
  • Интеграция: улучшена поддержка макросов readline для корректной работы с популярными инструментами, такими как starship, atuin и fzf. Также добавлены возможности сериализации AST и состояния оболочки через библиотеку serde в модулях brush-parser и brush-core.
Источник: https://www.linux.org.ru