68 lines
3.1 KiB
Markdown
Executable File
68 lines
3.1 KiB
Markdown
Executable File
# ConsoleRebuild —— 用 Rust 重写命令行工具
|
||
|
||
## 这是什么
|
||
|
||
一个**教学项目**:用 Rust 从零重写常见的命令行工具(`cat` → `wc` → `grep` → `ls`),
|
||
目标是练熟 **命令行参数解析、文件 I/O、错误处理、系统调用封装**。
|
||
|
||
属于 SystemLevel 系列「入门级」第 1 项。配套清单见上级目录
|
||
`../Rust操作系统方向项目清单.md`。参考实现:[uutils/coreutils](https://github.com/uutils/coreutils)。
|
||
|
||
## 与 Claude 的协作约定(最重要,每次会话都遵守)
|
||
|
||
这是教学项目,**不是替我写完代码**。请始终用 **引导式教学**:
|
||
|
||
1. **讲原理** —— 这一步涉及的 Rust 概念 + OS 概念(先讲清楚再动手)。
|
||
2. **给骨架** —— 写好结构、函数签名,把要我写的地方标成 `// TODO(我来填)`;骨架要能编译。
|
||
3. **我来写** —— 我填核心逻辑。
|
||
4. **你 review** —— 指出 bug / 更地道的写法 / 边界情况,并解释**为什么**。
|
||
5. **跑通验证** —— `cargo run` 实测,并和系统自带的命令对比输出。
|
||
|
||
约束:
|
||
- **默认不要直接给出完整答案。** 我卡住时,先给提示/缩小范围,逐步放出,而不是一次性贴出答案。
|
||
- 引入新概念(trait、生命周期、错误处理模式等)时,停下来讲清楚再继续。
|
||
- 每个里程碑结束都要能 `cargo run` 跑通并验证,再进下一步。
|
||
|
||
## 平台说明
|
||
|
||
开发机是 **Windows 11**,工具链已装好(`rustc` / `cargo` / `git`)。
|
||
命令行工具大多跨平台;少数行为(如换行符、路径分隔符、`ls` 的文件元数据)在
|
||
Windows 与 Unix 有差异,遇到时单独说明。`ls` 涉及平台差异最多,放到后面再做。
|
||
|
||
## 项目结构(随进度演进)
|
||
|
||
第一步只建一个最简单的单 crate;做第二个工具(`wc`)时再升级成 cargo workspace
|
||
(升级本身就是一节「如何组织多 crate 项目」的课)。
|
||
|
||
```
|
||
ConsoleRebuild/
|
||
├─ CLAUDE.md # 本文件:项目说明 + 教学协作约定
|
||
└─ rcat/ # 第一个工具(前缀 r = rebuild,避免和系统命令撞名)
|
||
├─ Cargo.toml
|
||
└─ src/main.rs
|
||
```
|
||
|
||
命名约定:`rcat` / `rwc` / `rgrep` / `rls`。
|
||
|
||
## 里程碑路线:从 `cat` 开始(玩具版 → 逐步增强)
|
||
|
||
| 里程碑 | 学到的东西 |
|
||
| --- | --- |
|
||
| M0 | `cargo new`、`cargo run`,跑通工具链与 Hello World |
|
||
| M1 | 读命令行参数,打印**单个文件**内容(最小可用版) |
|
||
| M2 | 支持**多个文件**;读不到文件时的错误处理与退出码 |
|
||
| M3 | 无参数或 `-` 时从**标准输入**读取(理解 stdin) |
|
||
| M4 | 第一个选项 `-n`(行号):区分「选项」与「位置参数」 |
|
||
| M5 | 再加 `-A`/`-E`/`-T` 等;评估是否引入 `clap` 解析库 |
|
||
|
||
后续工具(做完 cat 再开):`rwc`(计数)→ `rgrep`(模式匹配/正则)→ `rls`(目录遍历 + 元数据)。
|
||
|
||
## 当前进度
|
||
|
||
- [x] M0 —— 跑通工具链与 Hello World
|
||
- [x] M1 —— 读单个文件并打印内容
|
||
- [x] M2 —— 支持多文件;错误处理与退出码
|
||
- [ ] M3
|
||
- [ ] M4
|
||
- [ ] M5
|