
Brush é um shell escrito na linguagem Rust, que combina compatibilidade com POSIX e Bash com garantias de segurança de memória e desempenho. O projeto visa se tornar uma alternativa completa aos shells tradicionais, permitindo a execução de scripts existentes e a utilização do .bashrc praticamente sem alterações. Esta versão reúne vários meses de trabalho e mais de 200 pull requests combinados, avançando significativamente o shell em direção à substituição completa do Bash e de ambientes compatíveis com POSIX.
Principais direções de desenvolvimento nesta versão:
- compatibilidade com Bash: adição de set -e, set -u, pipefail, failglob, manipulador ERR, subprocessos e muito mais;
- confiabilidade: aprimoramento do tratamento de casos excepcionais - canais fechados, saída corrompida, histórico não-UTF8 e outros;
- plataformas: suporte ampliado ao macOS (funcionando como shell de login), melhorias no Windows, FreeBSD, Android e sistemas de 32 bits;
- interatividade: adição de configurações TOML opcionais, hooks preexec/precmd, aprimoramento do suporte a macros readline e mais.
Melhorias chave de compatibilidade com Bash
As principais atualizações desta versão incluem uma extensão significativa do suporte a recursos do Bash. Gerenciamento de erros:
- set -e (errexit) – saída imediata em caso de erro;
- set -u (nounset) – erro ao acessar variável não declarada;
- pipefail – o código de retorno do pipeline é determinado pelo último comando que falhou;
- failglob – a ausência de correspondências para a expressão glob agora resulta em um erro.
Manipuladores (Traps) e subprocessos:
- manipulador ERR — permite executar comandos no caso de um erro;
- subprocessos (coproc) — execução de processos em segundo plano com comunicação bidirecional.
Comandos embutidos:
- aprimoramento do tratamento de várias construções aritméticas, incluindo literais de alta base, estouros e operadores de atribuição;
- correções e melhorias afetaram comandos embutidos: caller, read, getopts, printf e outros.
Expansão do suporte a plataformas:
O lançamento da versão v0.4.0 torna o shell disponível em uma gama mais ampla de dispositivos:
- macOS: corrigido um problema que fazia o shell travar durante o login. Agora, brush pode ser usado como shell de login;
- Windows: melhorias no tratamento de caminhos, emulação adicionada de /dev/null, o que aumenta significativamente a facilidade de uso no Windows;
- FreeBSD e Android: uma versão é suportada para essas plataformas;
Funcionalidades interativas e API
- Configuração: suporte adicionado para um arquivo de configuração TOML opcional (~/.config/brush/config.toml) para configurações específicas do brush;
- Personalização: os estilos zsh preexec/precmd hooks foram implementados (através de uma flag experimental), úteis para criar prompts personalizados e ferramentas de medição de tempo;
- API para desenvolvedores: o tipo Shell agora é parametrizado por extensões (ShellExtensions), permitindo que desenvolvedores adicionem seus próprios comandos incorporados e modifiquem o comportamento das variáveis sem a necessidade de fork do projeto;
- Diversos:
- adicionadas funcionalidades de serialização AST e estado do shell através do serde;
- agora funções serde estão disponíveis em brush-parser e brush-core para possibilitar a serialização AST e estado do shell.
Fonte: linux.org.ru
