← LeisureLinux 文章索引
LeisureLinux · 微信公众号文章

用 Rust 重写的 Bash: Brush v0.4的重大更新

Linux/运维 阅读原文(微信)↗

Brush v0.4(全称Bo(u)rn(e) RUsty SHell)近期发布了其开发者称为"重大(Significant)"的更新。作为一个用 Rust 编写、目标是 100% 兼容 Bash/POSIX 的 Shell,这个版本标志着它从"实验性玩具"向"生产力工具"迈进了一大步。

1. 核心 Bash 特性的"拼图"补全

v0.4 最核心的进步在于实现了 Bash 脚本中处理复杂逻辑时必不可少的几个高级特性。这些特性的加入让 Brush 能够运行更多未经修改的生产级脚本:

  • 错误处理机制:完整实现了 set -e (errexit)、set -u (nounset) 和 pipefail。这意味着 Brush 现在能像 Bash 一样精确捕捉管道流中的非零退出码和未定义变量错误。
  • 进程间通信:新增了对 coproc(协进程)的支持,涵盖了从解析到执行的完整生命周期。
  • 增强陷阱(Traps):在之前支持 EXIT 的基础上,增加了 ERR trap。
  • 数学运算优化:对算术表达式执行了系统性重构,现在能更好地处理高进制字面量(high-radix literals)、溢出/下溢行为,以及递归检测。

2. 健壮性:消除"规避性"故障

开发者通过一次系统性的审计(Systematic Audit),移除了一整类可能导致 Shell 崩溃或状态异常的路径。

  • 边界情况处理:现在能优雅地处理关闭的管道(Closed pipes)、损坏的标准输出(Broken stdout)以及不寻常的文件描述符状态。
  • 数据一致性:支持非 UTF-8 编码的历史文件(History files),避免了在处理旧系统遗留数据时的崩溃。
  • 严格解析:未知命令行选项现在会返回退出码 2,严格对标 Bash 的工业标准。

3. 跨平台与工程化改进

虽然 Brush 是用 Rust 编写的,但它在 v0.4 中对非 Linux 平台的适配展示了其作为通用 Shell 的潜力:

  • macOS 登录 Shell:修复了在 macOS 上作为 Login Shell 启动时挂起的 Bug,现在可以正式作为日常 Shell 使用。
  • Windows 路径重构:彻底重写了 Windows 下的路径处理逻辑,并在 CI(持续集成)中加入了完整的 Windows 测试套件。
  • 架构演进
  • 泛型 Shell 类型:Shell 类型现在对 ShellExtensions 参数进行泛型化,这意味着嵌入式开发者可以不通过 Fork 源码,直接 Hook 进自定义的 Builtins(内建命令)。
  • AST 序列化:brush-parser 和 brush-core 现在支持通过 serde 进行 AST(抽象语法树)和 Shell 状态的序列化。

专家观点:为什么值得关注?

在 Linux 领域,尽管有Nushell这种彻底改变交互逻辑的新兴 Shell,但对于庞大的存量运维脚本和复杂的系统环境,Bash 兼容性依然是不可逾越的护城河。 Brush 的价值在于:它利用Rust 的内存安全特性重新实现了这个极其复杂且充满陷阱(如 Shellshock 漏洞)的古老协议。v0.4 的发布意味着它在逻辑层面已趋于成熟。如果你追求极致的安全,或者在嵌入式/容器环境(支持 bundling Coreutils)中寻找更可靠的 Shell 替代品,Brush v0.4 是一个非常关键的考察点。

Tip

习惯用 vim 的高手可以通过 cargo install brush-shell 快速安装,并在 \~/.config/brush/config.toml 中进行特定配置。

【sh 就等于 bash 吗?如何快速学 shell?-哔哩哔哩】 https://b23.tv/FFYPdoL

【登录shell和交互shell的澄清-哔哩哔哩】 https://b23.tv/EG6lYgC

【ps -aux 和 ps aux 是一样的吗?-哔哩哔哩】 https://b23.tv/Ubceurv

【应该学习什么 Shell? bash 还是 dash?-哔哩哔哩】 https://b23.tv/v9PCfrh

【从 login 和 non-login shell 引申出来的对 \$- 变量的理解-哔哩哔哩】 https://b23.tv/yDh2JzR

Anthropic 官方揭秘:为什么一个简单的 Bash 工具,能横扫复杂的 AI 架构?

AI 时代的生存法则:AI 工程师必备的 Bash 核心指南

从 MCP 到原生 CLI:解析 MiniMax 赋能 AI Agent 的模态原子化策略

别让"容错性"埋了坑:深度解析 pkill 信号位序的底层逻辑

本文整理自微信公众号 LeisureLinux 的原创内容(Linux / AI / 安全 硬核技术)。

· 阅读原文(微信公众号)

· 关注公众号 LeisureLinux,第一时间获取技术深度内容。

LeisureLinux 公众号二维码(微信扫一扫关注)