1 个不稳定版本
0.1.6 | 2021 年 10 月 19 日 |
---|
#31 在 #unix-shell
340KB
8K SLoC
conch-runtime
一个用于执行 Unix shell 命令的 Rust 库/运行时。
快速入门
首先,将以下内容添加到您的 Cargo.toml
[dependencies]
conch-runtime = "0.1"
接下来,您可以查看 基本的 shell 示例 以开始。
关于
此库提供根据 POSIX.1-2008 标准定义的已解析 shell 命令的执行。此运行时尝试对解析器可能产生的特定抽象语法树(AST)格式保持中立,以及对操作系统支持的功能保持中立,以便尽可能实现跨平台。
具体实现涵盖了由 conch-parser
包生成的所有默认 AST 节点。与其他 Unix shell 不同,此库支持 Windows1,并且可能可以扩展到其他操作系统。
1Windows 中合理地支持了主要功能。由于操作系统差异(例如异步 I/O 模型)以及 shell 编程语言的内在实现期望,某些功能可能需要额外的运行时成本,或者可能受到限制(例如,由于 Windows 地址文件句柄的方式,继承任意编号的文件描述符[除了标准输入输出]可能很困难/不可能)。
目标
- 提供高效、模块化的 shell 编程语言执行部分的实现,可以作为构建其他 shell 功能的基础
- 执行实现应该是可独立重用并对特定的 AST 表示形式保持中立
- 在可能的情况下,实现跨操作系统的合理功能一致性
- 尽可能避免对特定实现细节的假设,并允许调用者选择适当的权衡
非目标
- 100% POSIX.1-2008 兼容性:该标准用作实现基线,并且可能根据合理性或最有用性添加(或删除)功能
- 与所有主流壳的兼容性:除非某个特定功能被广泛使用(且被认为是常见的)或存在其他令人信服的理由需要包含。但是,这并不意味着库永远不会支持添加额外语法功能的扩展。
- 完整的壳实现:这个库旨在成为构建完整壳的垫脚石,而不是本身就是一个完整的壳。
支持的功能
- 条件列表(《foo && bar || baz》)
- 管道(《!foo | bar》)
- 作业(《foo &》)
- 复合命令
- 花括号块(《{ foo; }》)
- 子shell(《$ (foo)》)
-
for
/case
/if
/while
/until
- 函数声明
- 重定向
- Here documents
- 非stdio描述符的文件描述符继承
- 展开
- 参数(《$foo`, 《$@》, 等。)
- 参数替换(《${foo:-bar}》)
- 全局/路径展开
- 波浪号展开
- 算术替换
- 标准所需的标准算术操作(《http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_06_04》)
- 变量展开
- 其他内部任意参数/替换展开
- 引用(单引号、双引号、反引号、转义)
- 内置命令(例如《cd》, 《echo》, 等。)
- 信号处理
- 别名解析
许可协议
许可协议如下
- Apache License, Version 2.0(《LICENSE-APACHE》或《http://www.apache.org/licenses/LICENSE-2.0》)
- MIT 许可协议(《LICENSE-MIT》或《http://opensource.org/licenses/MIT》)
任选其一。
贡献
除非你明确表示,否则根据Apache-2.0许可证定义的,任何有意提交以包含在作品中的贡献,都应以上述双重许可,没有额外的条款或条件。
依赖项
~7MB
~110K SLoC