2 个不稳定版本
0.2.0 | 2021年4月14日 |
---|---|
0.1.0 | 2018年11月18日 |
#2849 在 命令行工具
32KB
658 行
rash - Rust Bourne Shell
受 dash 启发的 bourne shell。
目标
以下目标指导设计决策和功能路线图。一旦 shell 完成,我们可以考虑更雄心勃勃的目标,如实现 POSIX 以外的功能、扩展编程语言以及更激进的速度优化。
指导目标包括
- 高度 POSIX 兼容性
- 有用的错误信息
- 现代终端界面功能
- 快速
- 默认安全(即使这意味着违反 POSIX)
设计
整体设计受 dash shell 启发,dash 是 Debian 和 Ubuntu 中的默认 /bin/sh
。它有着悠久的血统,可以追溯到早期的 bourne shell。
dash 是为了速度、POSIX 兼容性和小型代码库而构建的。它是一个优秀的设计智慧来源,并在 POSIX 规范不明确时作为一个良好的参考实现。
rash 的解析器和评估器从 dash 中汲取灵感。rash 使用一个名为 LALRPOP 的解析器生成器生成 AST。然后它遍历 AST 评估语句。语法和 AST 基于 POSIX 定义的语法和术语,这使得将标准用作理解 rash 的参考变得容易。
贡献
欢迎贡献!以下状态列表是一个寻找要实现的功能的好地方。如果代码库一开始看起来太复杂,有几个功能不需要更改太多现有代码。
为问题、请求或补丁打开 GitHub Issue。
该项目受 Apache License 2.0 许可。
状态
除了最不常见的功能外,语法和功能要么已完全实现,要么根本未实现。这意味着您可以在使用以下标记为完整的功能时充满信心。现有功能中的任何错误或遗漏都是错误,可能会被视为错误。
功能
- 执行命令
- 管道
- 布尔逻辑
- 异步执行 (
&
) - 路径搜索
- 变量插值
- 环境操作(export、unset、readonly、变量前缀)
- cd
- 保存退出状态 (
$?
) - 子shell
- 插值 $() 和反引号
- 评估引号,单引号
- I/O 重定向
- 作业控制
- shell 启动参数(例如
-c
,-l
) -
set
命令 - 控制流运算符(
if
,while
,case
)
交互式模式
- 历史记录(尚未可配置或持久化)
- 键绑定(尚未可配置)
- 可配置设置
- Tab 完成功能
质量改进
- 合规性测试套件
- 参见 osh 测试
- 一致的错误消息格式
- 路径哈希
- 其他常见性能优化
参考文献
相关 Rust 语言信息
依赖关系
~6–15MB
~181K SLoC