shell/README.md

65 lines
2.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Shell Utilities
本模块旨在提供一套极致精简、高性能且符合 POSIX 语义的终端与 Shell 基础设施。它不仅是简单的命令执行包装,更提供了流式实时回调、上下文管理及命令链式执行能力。
## 核心设计哲学
- **语义对齐**: 针对 Shell 交互行为(如 `|` 管道,`&&` 短路逻辑)进行语义一致性实现。
- **安全优先**: 默认支持进程组管理 (`pgid`),确保中断信号能精准传播至整个命令链条,避免产生僵尸进程。
- **内存透明**: 通过 `bytes.Buffer` 和流式 IO 接口管理大规模输出,避免内存溢出风险。
## API 指南
### 终端渲染 (Color)
用于生成符合终端 ANSI 标准的样式字符串。
- **`Style(a ...any) string`**: 核心渲染引擎。自动合并样式常量与内容,并处理 Windows 系统下的兼容性(剥离样式)。
- **颜色定义**:
- 前景色: `TextBlack`, `TextRed`, `TextGreen`, `TextYellow`, `TextBlue`, `TextMagenta`, `TextCyan`, `TextWhite`
- 背景色: `BgBlack`, `BgRed`, `BgGreen`, `BgYellow`, `BgBlue`, `BgMagenta`, `BgCyan`, `BgWhite`
- 属性: `Reset`, `Bold`, `Dim`, `Italic`, `Underline`, `Blink`, `Reverse`, `Hidden`
- **高阶快捷函数**:
- 颜色快捷调用: `Red("error")`, `Green("success")` 等。
- 背景色快捷调用B开头: `BRed("fatal")` (带白色前景色)。
### 命令执行 (Run)
#### 数据结构
- **`Options`**: 配置执行行为
- `Env []string`: 环境变量增量
- `Stdin io.Reader`: 自定义输入源
- `CatchSignal bool`: 是否开启信号捕获,确保进程树生命周期一致
- `Timeout time.Duration`: 执行超时限制
- `Dir string`: 设置工作目录
- `Verbose bool`: 是否开启详细执行日志(终端高亮输出)
- `OnStdout func([]byte)`: 实时 stdout 捕获回调
- `OnStderr func([]byte)`: 实时 stderr 捕获回调
- **`CommandResult`**: 命令执行反馈
- `Stdout []byte`: 标准输出内容
- `Stderr []byte`: 标准错误输出内容
- `ExitCode int`: 进程退出码0 成功,非 0 失败)
- `ProcessErr error`: 执行层面的错误信息
#### 函数接口
- **`Run(name string, args []string, opts *Options) (*CommandResult, error)`**: 基础执行。
- **`RunCommand(command string, opts *Options) (*CommandResult, error)`**: 支持解析 `|` 管道与 `&&` 短路逻辑的复合命令执行。
- **`Pipeline(commands [][]string, opts *Options) (*CommandResult, error)`**: 执行多命令并行管道,高性能 IO 传输。
## 使用示例
```go
// 1. 带超时和实时回调的执行
res, err := shell.Run("grep", []string{"pattern", "file.log"}, &shell.Options{
Timeout: 5 * time.Second,
OnStdout: func(data []byte) { fmt.Printf("Output: %s", data) },
})
// 2. 管道与短路逻辑组合
res, err := shell.RunCommand("cat file.txt | grep 'foo' && echo 'found'", nil)
```
## 测试与质量保证
请参考 [TEST.md](./TEST.md) 获取覆盖率与 Benchmark 数据。