#shell #file-descriptor #run-time #programming-language #unix-shell #async-io

conch-runtime-pshaw

一个用于评估/执行用 shell 编程语言编写的程序的库

1 个不稳定版本

0.1.6 2021 年 10 月 19 日

#31#unix-shell

MIT/Apache

340KB
8K SLoC

conch-runtime

Crates.io Documentation Build Status Build Status Coverage

一个用于执行 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