
Brush to powłoka komend napisana w języku Rust, która łączy zgodność z POSIX i Bash z gwarancjami bezpieczeństwa pamięci oraz wydajnością. Projekt ma na celu stanie się pełnoprawną alternatywą dla tradycyjnych powłok, umożliwiając uruchamianie istniejących skryptów i korzystanie z .bashrc praktycznie bez zmian. Ta wersja łączy kilka miesięcy pracy i ponad 200 scalonych pull-requestów, znacząco posuwając powłokę w kierunku pełnoprawnej alternatywy dla Bash i środowisk zgodnych z POSIX.
Główne kierunki rozwoju w tym wydaniu:
- zgodność z Bash: dodano set -e, set -u, pipefail, failglob, obsługa ERR, współprocesy i wiele innych;
- niezawodność: poprawiona obsługa wyjątkowych przypadków – zamkniętych kanałów, uszkodzonego wyjścia, historii nie-UTF8 i innych;
- platformy: rozszerzona obsługa macOS (działanie jako powłoka logowania), poprawione działanie w Windows, FreeBSD, Androidzie i systemach 32-bitowych;
- interaktywność: dodano opcjonalne pliki konfiguracyjne TOML, haki preexec/precmd, poprawiono obsługę makr readline i inne.
Kluczowe poprawki zgodności z Bash
Najważniejszymi usprawnieniami tego wydania było znaczące rozszerzenie wsparcia dla możliwości Bash. Zarządzanie błędami:
- set -e (errexit) – natychmiastowe wyjście w przypadku błędu;
- set -u (nounset) – błąd przy odwołaniu się do niezadeklarowanej zmiennej;
- pipefail – kod wyjścia potoku określany jest przez ostatnią nieudającą się komendę;
- failglob – brak dopasowań dla wzoru glob teraz prowadzi do błędu.
Obsługiwacze (Traps) i współprocesy:
- obsługiwacz ERR – umożliwia wykonywanie komend przy wystąpieniu błędu;
- współprocesy (coproc) – uruchamianie procesów w tle z dwukierunkową komunikacją.
Wbudowane komendy:
- poprawiona obsługa wielu konstrukcji arytmetycznych, w tym literalów z wysoką podstawą, przepełnień i operatorów przypisywania;
- poprawki i usprawnienia dotyczyły wbudowanych komend: caller, read, getopts, printf i innych.
Rozszerzenie wsparcia dla platform:
Wydanie v0.4.0 sprawia, że powłoka jest dostępna na szerszej gamie urządzeń:
- macOS: naprawiono problem, przez który powłoka zawieszała się podczas logowania. Teraz brush można używać jako powłokę logowania (login shell);
- Windows: poprawki w obsłudze ścieżek, dodana emulacja /dev/null, co znacznie zwiększa wygodę użytkowania w Windows;
- FreeBSD i Android: wsparcie dla tych platform jest dostępne;
Interaktywne funkcje i API
- Konfiguracja: dodano wsparcie dla opcjonalnego pliku konfiguracyjnego TOML (~/.config/brush/config.toml) dla ustawień specyficznych dla brush;
- Personalizacja: wprowadzono style zsh dla preexec/precmd hooków (pod flagą eksperymentalną), przydatnych do tworzenia niestandardowych zaproszeń i narzędzi do pomiaru czasu;
- API dla deweloperów: typ Shell jest teraz parametryzowany rozszerzeniami (ShellExtensions), co daje deweloperom możliwość dodawania własnych wbudowanych poleceń i zmiany zachowania zmiennych bez konieczności forka projektu;
- Różne:
- dodano możliwości serializacji AST i stanu powłoki za pomocą serde;
- funkcje serde do serializacji AST i stanu powłoki są teraz dostępne w brush-parser i brush-core.
Źródło: linux.org.ru
