- 新增 Start(name, args, opts) 异步启动命令,立即返回 *Process - Process 提供 Kill/Read/Write/Check 方法管理子进程生命周期 - stdout/stderr 默认流式输出到终端,同时缓冲供 Read 读取 - Kill 优雅终止:先 SIGTERM,200ms 后 SIGKILL - 更新 CHANGELOG、README、TEST 文档 Co-Authored-By: deepseek-v4-pro[1m] <deepseek-ai@claude-code-best.win>
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 传输。
异步进程管理 (Start)
数据结构
Process: 代表由Start启动的运行中命令Kill() error: 终止进程组(SIGTERM → 200ms → SIGKILL),Windows 直接 KillRead(data []byte) (int, error): 读取缓冲的 stdout 数据(上限 512KB,超出丢弃旧数据)Write(data []byte) (int, error): 向进程 stdin 写入数据Check() error: 检查进程是否仍在运行,已退出则返回错误
函数接口
Start(name string, args []string, opts *Options) (*Process, error): 异步启动命令,立即返回*Process。stdout/stderr 默认流式输出到终端,可通过opts.OnStdout/opts.OnStderr自定义回调。
使用示例
// 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)
// 3. 异步启动长期运行的服务
proc, err := shell.Start("go", []string{"run", "server.go"}, &shell.Options{
Dir: "./app",
OnStdout: func(data []byte) { log.Print(string(data)) },
})
if err != nil { panic(err) }
defer proc.Kill()
// 写入 stdin
proc.Write([]byte("input\n"))
// 检查运行状态
if err := proc.Check(); err != nil {
fmt.Println("process stopped:", err)
}
测试与质量保证
请参考 TEST.md 获取覆盖率与 Benchmark 数据。
Description
Languages
Go
100%