8.1 命令组合基础
在前面的章节中,我们已经学习了 CLI 命令、CLI 标志和斜杠命令的单独使用。在本章中,我们将学习如何将这些命令和标志组合起来,创建更强大、更高效的自动化工作流。
命令组合的概念
命令组合是指将多个命令、标志和参数按照一定的逻辑组合在一起,以实现复杂的功能。通过命令组合,您可以:
- 串联多个操作 :将多个独立的命令串联起来执行
- 传递数据 :使用管道将一个命令的输出传递给另一个命令
- 条件执行 :根据前一个命令的结果决定是否执行后续命令
- 并行处理 :同时执行多个独立的命令以提高效率
基本组合模式
1. 标志组合
最简单的组合方式是同时使用多个标志来配置 Claude Code 的行为。
示例:使用多个标志
bash
# 使用多个标志配置会话
claude --model sonnet --verbose --add-dir ./src --add-dir ./tests
这个命令组合了四个标志:
--model sonnet:指定使用 Sonnet 模型--verbose:启用详细日志记录--add-dir ./src:添加 src 目录--add-dir ./tests:添加 tests 目录
标志组合的原则
- 顺序无关 :大多数标志的顺序不影响功能
- 优先级 :后指定的标志可能覆盖前面的标志
- 兼容性 :某些标志可能互斥,不能同时使用
2. 管道组合
使用管道(|)将一个命令的输出传递给另一个命令。
示例:处理文件内容
bash
# 读取文件并通过管道传递给 Claude Code
cat main.py | claude -p "优化这段代码的性能"
这个命令的工作流程:
cat main.py:读取 main.py 文件的内容|:将文件内容通过管道传递claude -p "优化这段代码的性能":接收文件内容并执行优化任务
python
#### 示例:链式处理
bash
# 多个命令的链式处理
cat code.py | claude -p "提取函数定义" | grep "def " | sort
这个命令的工作流程:
1. `cat code.py`:读取 code.py 文件
2. `claude -p "提取函数定义"`:提取所有函数定义
3. `grep "def "`:过滤出包含 "def " 的行
4. `sort`:对结果进行排序
#### 管道组合的注意事项
* **数据格式** :确保管道传递的数据格式正确
* **错误处理** :管道中的任何命令失败都会导致整个链失败
* **性能考虑** :长管道链可能影响性能
### 3\. 命令替换
使用命令替换将一个命令的输出作为另一个命令的参数。
#### 示例:使用命令替换
bash
# 将命令输出作为参数
claude -p "审查 $(git diff --name-only) 中的文件"这个命令的工作流程:
git diff --name-only:获取修改的文件列表$():将输出作为参数传递claude -p "审查 ... 中的文件":审查这些文件
示例:动态参数
bash
# 根据当前分支动态生成参数
claude -p "为 $(git branch --show-current) 分支生成提交信息"
4. 条件执行
根据前一个命令的执行结果决定是否执行后续命令。
示例:使用 && 操作符
bash
# 前一个命令成功后才执行后一个命令
claude -p "生成测试代码" && claude -p "运行测试"
这个命令的工作流程:
- 执行
claude -p "生成测试代码" - 如果成功,执行
claude -p "运行测试" - 如果失败,不执行后续命令
示例:使用 || 操作符
bash
# 前一个命令失败时才执行后一个命令
claude -p "尝试快速修复" || claude -p "使用备用方案"
这个命令的工作流程:
- 执行
claude -p "尝试快速修复" - 如果失败,执行
claude -p "使用备用方案" - 如果成功,不执行后续命令
示例:使用 ; 操作符
bash
# 无论前一个命令是否成功都执行后一个命令
claude -p "生成代码" ; claude -p "生成文档"
5. 后台执行
将命令放在后台执行,不阻塞当前终端。
示例:后台执行
bash
# 在后台执行长时间运行的任务
claude -p "分析大型项目" &
这个命令的工作流程:
&:将命令放在后台执行- 命令在后台运行,终端可以继续使用
示例:并行执行多个任务
bash
# 并行执行多个独立的任务
claude -p "分析前端代码" &
claude -p "分析后端代码" &
claude -p "分析测试代码" &
wait
这个命令的工作流程:
- 同时启动三个独立的任务
- 每个任务在后台运行
wait:等待所有后台任务完成
高级组合模式
1. 函数封装
将命令组合封装成函数,便于重复使用。
#### 示例:Bash 函数
bash
# 定义一个代码审查函数
code_review() {
local file=$1
claude -p "审查 $file 的代码质量、安全性和性能" --output-format json
}
# 使用函数
code_review main.py
code_review utils.js
#### 示例:带参数的函数
bash
# 定义一个带多个参数的函数
analyze_project() {
local project_dir=$1
local model=$2
local output_format=$3
claude --model "$model" \
--add-dir "$project_dir" \
-p "分析项目结构和代码质量" \
--output-format "$output_format"
}
# 使用函数
analyze_project ./myproject sonnet json
### 2\. 循环处理使用循环批量处理多个文件或项目。
示例:for 循环
bash
# 批量处理多个文件
for file in *.py; do
claude -p "优化 $file 的性能" > "${file%.py}.optimized.py"
done
这个命令的工作流程:
- 遍历所有 .py 文件
- 对每个文件执行优化任务
- 将结果保存到 .optimized.py 文件
示例:while 循环
bash
# 持续监控文件变化
while inotifywait -e modify *.py; do
claude -p "检测到文件变化,重新分析代码"
done
3. 数组处理
使用数组存储和处理多个项目。
#### 示例:数组遍历
bash
# 定义项目数组
projects=("frontend" "backend" "api" "tests")
# 遍历数组并处理每个项目
for project in "${projects[@]}"; do
claude --add-dir "./$project" -p "分析 $project 项目"
done
#### 示例:动态数组
bash
# 动态生成数组
files=($(git diff --name-only))
# 处理数组中的每个文件
for file in "${files[@]}"; do
claude -p "审查 $file 的变更"
done
## 命令组合的最佳实践
### 1\. 可读性
* **使用注释** :为复杂的命令组合添加注释
* **合理换行** :长命令使用反斜杠换行
* **命名变量** :使用有意义的变量名
#### 示例:提高可读性
bash
# 定义变量
PROJECT_DIR="./myproject"
MODEL="sonnet"
OUTPUT_FORMAT="json"
# 使用变量和注释
claude \
--model "$MODEL" \
--add-dir "$PROJECT_DIR" \
--add-dir "$PROJECT_DIR/tests" \
--add-dir "$PROJECT_DIR/docs" \
-p "分析项目结构和代码质量" \
--output-format "$OUTPUT_FORMAT"
### 2\. 错误处理- 检查退出码 :检查命令是否成功执行
- 捕获错误 :使用 trap 捕获错误
- 提供反馈 :为用户提供清晰的错误信息
bash
#### 示例:错误处理
bash
# 检查命令是否成功
if claude -p "生成代码"; then
echo "代码生成成功"
else
echo "代码生成失败"
exit 1
fi
# 使用 trap 捕获错误
trap 'echo "发生错误,退出码: $?"' ERR
claude -p "执行任务1"
claude -p "执行任务2"
claude -p "执行任务3"
### 3\. 性能优化- 并行执行 :使用后台执行和 wait 提高效率
- 缓存结果 :避免重复执行相同的命令
- 增量处理 :只处理变化的部分
bash
#### 示例:性能优化
bash
# 并行处理多个文件
for file in *.py; do
claude -p "分析 $file" > "${file%.py}.analysis.json" &
done
wait
# 使用缓存
CACHE_FILE="analysis.cache"
if [ -f "$CACHE_FILE" ]; then
echo "使用缓存结果"
cat "$CACHE_FILE"
else
claude -p "分析项目" > "$CACHE_FILE"
fi
### 4\. 可维护性
* **模块化** :将复杂的命令组合拆分成多个函数
* **配置化** :使用配置文件管理参数
* **文档化** :为命令组合编写文档
#### 示例:模块化
bash
# 定义模块化函数
setup_environment() {
claude --add-dir ./src --add-dir ./tests --add-dir ./config
}
generate_code() {
claude -p "生成代码"
}
run_tests() {
claude -p "运行测试"
}
# 组合函数
main() {
setup_environment
generate_code
run_tests
}
# 执行主函数
main
## 常见组合场景
### 1\. 代码审查工作流
bash
# 完整的代码审查工作流
claude -p "审查最近的代码变更" \
--output-format json \
> review.json && \
claude -p "根据审查结果生成修复建议" \
--input-format json \
< review.json
### 2\. 文档生成工作流
bash
# 自动生成文档
claude -p "提取所有函数和类的文档注释" \
--output-format json \
> docs.json && \
claude -p "根据提取的信息生成 Markdown 文档" \
--input-format json \
< docs.json > README.md
### 3\. 测试工作流
bash
# 自动化测试工作流
claude -p "生成测试用例" > test_cases.txt && \
claude -p "运行测试用例" && \
claude -p "分析测试结果" --output-format json > test_results.json
### 4\. 部署工作流
bash
# 自动化部署工作流
claude -p "检查代码质量" && \
claude -p "生成部署清单" && \
claude -p "执行部署脚本" && \
claude -p "验证部署结果"
## 总结命令组合是发挥 Claude Code 强大功能的关键。通过掌握基本的组合模式(标志组合、管道组合、命令替换、条件执行、后台执行)和高级组合模式(函数封装、循环处理、数组处理),您可以创建强大、高效的自动化工作流。
记住以下要点:
- 从简单开始 :先掌握基本的组合模式
- 逐步复杂 :在掌握基础后尝试高级模式
- 注重实践 :通过实际项目练习命令组合
- 持续优化 :不断改进和优化您的命令组合
在接下来的章节中,我们将学习如何将这些命令组合应用到脚本编写、CI/CD 集成、批处理操作和实际工作流中。