LINUX.ORG.RU

Brush v0.4.0

 , brush, ,

Brush v0.4.0

1

4

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

★★★★★

Проверено: dataman ()
Последнее исправление: dataman (всего исправлений: 2)
Ответ на: комментарий от dataman

Ну, видимо «лучшие времена» еще не наступили :)


Кстати, пользуясь случаем спрошу: не знаешь как поменять местами поведение хоткеев Ctrl+W и Alt+Backspace?

Чтобы Ctrl+W удалял слово до первого разделяющего символа (как в ksh), это работает:

bindkey --emacs '\^W' backward-delete-emacsword

Как узнать ескейп последовательность для комбинации Alt+Backspace?

bindkey --emacs '??' backward-delete-bigword
err
()
Ответ на: комментарий от err

заработало, после того как увеличил размер окна браузера.

Посмотрел код страницы. Там <img ... src="https://www.linux.org.ru/images/23373/1000px.jpg" ... srcset="images/23373/500px.jpg 500w, images/23373/1000px.jpg 1000w, images/23373/1500px.jpg 1500w, https://www.linux.org.ru/images/23373/original.gif 1600w" ...> Поэтому GIF выдаёт для 1600 и выше.

[ЖЖ]Как же меня этот srcset на WordPress задолбал…[/ЖЖ]

question4 ★★★★★
()
Ответ на: комментарий от dataman

Спасибо. Не получилось изменить поведение, к сожалению. Я и до этого уже помню гуглил и утилиты какие-то пробовал, безрезультатно.

Вот что выводит showkey -a (из пакета kbd), но в оболочке не работает эта последовательность:

^[^?     27 0033 0x1b
        127 0177 0x7f

при этом вывод для Ctrl+W состоит из одной строки:

^W       23 0027 0x17

а вот что показывает key-reader:

<x1B><x7F>
err
()
Ответ на: комментарий от kaldeon

Легаси-лапшу лучше вообще запускать

Само собой.

гарантировать совместимость с монстром вроде баша невозможно

И это +1 повод наконец-то избавиться от сраных башизмов, что само по себе позитив.

zabbal ★★★★☆
()
Ответ на: комментарий от madcore

была запускалка, которая отлаживалась десятки лет

… и всё-равно осталась убожеством потому что делали это авторы башизмов с помощью того что заменяет им моск.

zabbal ★★★★☆
()
Ответ на: комментарий от err

Я думаю в это и весь смысл сабжа и прочих переписок типа uutils. Кому то очень не нравится GPL.

UriZzz ★★
()
Последнее исправление: UriZzz (всего исправлений: 2)
Ответ на: комментарий от madcore

Он от слова Rust писает кипятком и не может дочитать новость дальше первой запятой

Logopeft ★★★
()
Ответ на: комментарий от question4

ну нахера так сделано?
я бы никогда и не узнал, что там на самом деле гифка должна быть
и по клику даже не показывается
так верстают только...

madcore ★★★★★
()

cargo install –locked brush-shell 251 crates

  • 14M мая 7 12:09 .cargo/bin/brush
  • 1,3M окт 4 2024 /bin/bash
ldd /bin/bash
        linux-vdso.so.1 (0x00007f54d5a1a000)
        libtinfo.so.6 => /lib64/libtinfo.so.6 (0x00007f54d59ba000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f54d5600000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f54d5a1c000)

и

ldd .cargo/bin/brush
        linux-vdso.so.1 (0x00007eff12ef8000)
        libgcc_s.so.1 => /usr/lib64/libgcc_s.so.1 (0x00007eff12e9f000)
        libm.so.6 => /lib64/libm.so.6 (0x00007eff12db3000)
        libc.so.6 => /lib64/libc.so.6 (0x00007eff11e00000)
        /lib64/ld-linux-x86-64.so.2 (0x00007eff12efa000)
splinter ★★★★★
() автор топика
Последнее исправление: splinter (всего исправлений: 1)
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.