7 个版本
使用旧的 Rust 2015
0.1.6 | 2019年6月3日 |
---|---|
0.1.5 | 2018年9月22日 |
0.1.4 | 2018年1月27日 |
0.1.1 | 2017年9月14日 |
0.0.0 |
|
#29 在 #unix-shell
67 每月下载量
535KB
12K 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,并且可能可以扩展以支持其他操作系统。
1在 Windows 中,主要功能得到了合理的支持。由于操作系统差异(例如异步 I/O 模型)以及 shell 编程语言的内禀实现预期,某些功能可能需要额外的运行时成本,或者可能具有局限性(例如,由于 Windows 地址文件句柄的方式,继承任意编号的文件描述符[除 stdio 之外]可能很困难/不可能)。
目标
- 提供高效、模块化的 shell 编程语言执行部分的实现,这些实现可以用作构建其他 shell 功能的基础
- 执行实现应该是独立可重用的,并且对特定的 AST 表示形式保持中立
- 在可能的情况下,实现操作系统之间的合理功能兼容性
- 在可能的情况下,避免对特定实现细节的假设,并允许调用者选择适当的权衡
非目标
- 100% POSIX.1-2008 兼容:该标准用作实现基线,并根据其合理性或有用性添加(或删除)功能
- 与所有主流壳的兼容性:除非特定功能被广泛使用(并被认为是常见的)或者存在其他包含的充分理由。然而,这并不意味着库永远不会支持用于添加额外语法功能的扩展。
- 完整的壳实现:这个库的目标是成为一个构建完整壳的垫脚石,而不成为壳本身。
支持的功能
- 条件列表(
foo && bar || baz
) - 管道(
! foo | bar
) - 作业(
foo &
) - 复合命令
- 花括号块(
{ foo; }
) - 子shell(
$(foo)
) -
for
/case
/if
/while
/until
- 花括号块(
- 函数声明
- 重定向
- 这里文档
- 非stdio描述符的文件描述符继承
- 展开
- 参数(
$foo
,$@
等) - 参数替换(
${foo:-bar}
) - glob/路径展开
- 波浪线展开
- 算术替换
- 标准所需的常用算术运算(链接)
- 变量展开
- 其他内部任意参数/替换展开
- 参数(
- 引号(单引号、双引号、反引号、转义)
- 内置命令(例如
cd
,echo
等) - 信号处理
- 别名解析
许可证
许可以下之一
- Apache许可证,版本2.0,(LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
您可选择。
贡献
除非您明确声明,否则根据Apache-2.0许可证定义的任何贡献,旨在包含在作品中,应如上双许可,不附加任何额外条款或条件。
依赖
~9MB
~151K SLoC