Brush (Bo(u)rn(e) RUsty SHell):一个用 Rust 实现的兼容 POSIX 和 Bash 的 Shell

brush (B o(u)rn(e) RUsty SHell) 是一个用 Rust 实现的,兼容 POSIXbash 的 shell。 它构建并测试于 Linux 和 macOS 上,并对 Windows 提供实验性支持。(其 Linux 构建版本完全支持通过 WSL 在 Windows 上运行。)

screenshot

brush 作为日常驱动程序在交互式使用方面是有效的! 它可以执行我们遇到的大多数 shbash 脚本。 已知的限制会通过提交 issue 跟踪。 出于谨慎考虑,我们不建议在 生产 场景中使用它,以防其行为与您现有的稳定 shell 不完全相同。(如果您确实发现了任何行为差异,请通过 issue 报告!)

欢迎各种贡献和反馈! 有关更多指导,请查阅我们的贡献指南。 有关更多技术细节,请参阅此 repo 中的文档

该项目最初源于好奇心和学习的愿望。 我们正在尽最大努力保持这种态度 :)。

许可证

可在 MIT 许可证 下使用和分发。

尝试一下!

我们不发布 brush 的二进制版本,但是如果您安装了可用的 rust 工具链,则只需运行:

cargo install --locked brush-shell

这将从 crates.io 安装最新发布的 brush 版本。 另外,对于最新版本,您可以克隆此 repo 并执行 cargo run

如果您没有安装 rust,建议通过 rustup 安装

(如果您 兴趣拥有二进制版本,请在项目的“Discussions”区域中告知我们,或在“Issues”中提交功能请求。)

如果您是 Nix 用户,您也可以使用已注册的版本。

nix run 'github:NixOS/nixpkgs/nixpkgs-unstable#brush' -- --version

Arch Linux 用户可以使用他们选择的 AUR 助手 从 AUR 安装 brush,例如:

paru -S brush

运行 brush 时,它应该看起来与系统上的 bash 完全一样,因为它会处理 .bashrc 和其他常用配置。 如果您想自定义 brush 的外观以使其与系统上安装的其他 shell 区分开来,则还可以编写 ~/.brushrc 文件。

已知限制

兼容性方面存在一些已知的差距。 最值得注意的是:

如果您愿意,我们非常欢迎您为以上任何一项做出贡献,包括扩大测试范围,更深入地评估兼容性,或者您可以找到的任何其他机会来帮助我们使该项目变得更好。

测试策略

该项目主要通过将其行为与其他现有 shell 进行比较来测试,并利用后者作为测试预言机。 在此 repo 中实现的集成测试包括 550 多个测试用例,这些用例在此 shell 和预言机上运行,比较标准输出和退出代码。

有关更多详细信息,请查阅有关集成测试的参考文档

鸣谢

这个项目建立在许多 OSS crate 的肩膀上。 值得注意的是,以下 crate 被直接依赖于 shell 功能的主要部分:

对于测试,性能基准测试和其他重要的工程支持,我们使用并喜欢:

链接:其他 shell 实现

还有许多其他的 POSIX-ish shell 是用非 C/C++ 实现语言实现的。 一些鼓舞人心的例子包括:

我们确信还有更多; 我们也很乐意包括指向它们的链接。