2 个不稳定版本

0.2.0 2021年4月14日
0.1.0 2018年11月18日

#2849命令行工具

Apache-2.0

32KB
658

rash - Rust Bourne Shell

Build Status Crates.io

受 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 命令
  • 控制流运算符(ifwhilecase

交互式模式

  • 历史记录(尚未可配置或持久化)
  • 键绑定(尚未可配置)
  • 可配置设置
  • Tab 完成功能

质量改进

  • 合规性测试套件
  • 一致的错误消息格式
  • 路径哈希
  • 其他常见性能优化

参考文献

dash 主页

POSIX Shell 语法

CLI shell 功能概述

ion shell(用 rust 编写)

oursh(用 rust 编写)

相关 Rust 语言信息

关于在递归结构上循环的讨论

依赖关系

~6–15MB
~181K SLoC