1个不稳定版本
0.0.0 | 2023年7月23日 |
---|
#15 在 #内置
85KB
2.5K SLoC
SBash
描述
严格的Bash Shell、编译器和解释器。设计用于作为具有最小依赖性的Linux交互式shell,并将bash脚本编译成独立的静态二进制文件。将仅支持bash语法的子集。
待办事项
- repl模式中的eval
- repl模式中的内建命令
- 从外部文件源
- 实现别名
- 使用管道链式命令
- 将命令输出赋值给变量
- 使用单一模型输出命令/内建命令/函数
- 实现重定向
- 实现if/for块
- 完成自动完成
- 从上一个命令的终端输出复制
- 逐步执行,具有深度控制,显示命令并等待
- 选项:自动将命令输出重定向到文件
功能
- 不是POSIX shell
- 快速编译
- 静态编译,无依赖
- 支持独特的bash变量/函数声明语法
- 不能覆盖函数,优先定义
- 局部变量(以小写字母开头)不会传播到函数外部
- 没有默认值的函数参数被视为必需的
- 调用函数时缺少必需参数时出错
- 尝试访问未定义变量时出错
- 始终假定$后跟{,并且方括号/括号正确关闭
- 仅有一层子命令
- 子命令只能用于双引号字符串的开头
- 子命令限于变量/单词和重定向符号
- (目前)不支持多行字符串
- 变量必须始终加引号
- 内建命令作为简单的Rust函数实现(+可能使用宏简化?)
- 没有外部配置或可控制的隐藏变量
- 函数不能创建新的全局变量
- 函数参数必须在函数开头分配给局部变量
- 执行从
main
函数开始
限制
- 在某些边缘情况下可能会失败
- 不支持嵌套引号
- 还没有重定向
- 仅支持${alpha_or_num},不支持$@或$*或其他形式
- 用户定义函数最多只能传递9个参数
- 还没有if/while/for
- 还没有数学运算,如果需要可能会作为内建命令实现
目标
- 解析带有作用域和默认值的bash变量
- 通过
function
关键字解析bash函数 - 支持调用外部命令和函数
- 实现基本bash功能的一个子集
- 支持stdout/err重定向和管道
构建
cargo build --target x86_64-unknown-linux-musl --release
其他
fix some warnings
cargo fix --allow-dirty