主题
3.5 CLI 高级用法 — 把 Claude Code 嵌入你的工作流
学习目标
学完这节课,你将能够:
- 使用管道模式将文件或命令输出传给 Claude Code 处理
- 在脚本和 CI/CD 中使用非交互模式
- 用 JSON 输出格式对接其他程序
- 通过预算控制防止意外超支
管道模式 — 让 Claude Code 处理任何输入
Unix 哲学的核心思想之一:小程序通过管道组合成强大的工作流。Claude Code 完美支持这个理念。
基本用法
用 -p(print)参数启用管道模式,Claude Code 会读取标准输入、处理、输出结果,然后退出。不进入交互对话。
bash
# 审查一个文件
cat src/auth.ts | claude -p "审查这段代码的安全性"
# 解释一段错误日志
tail -100 /var/log/app.log | claude -p "分析这些错误日志,找出根因"
# 给函数写文档注释
cat src/utils.py | claude -p "给每个函数添加 docstring"[截图: cat + pipe + claude -p 的终端执行效果,显示输入的代码和输出的审查结果]
实用组合
管道模式的威力在于和其他命令组合:
bash
# 审查 Git 最近的改动
git diff HEAD~1 | claude -p "审查这些改动,关注潜在的 Bug"
# 分析测试失败原因
npm test 2>&1 | claude -p "分析这些测试失败的原因并给出修复建议"
# 解释一个复杂命令
echo "find . -name '*.py' -exec grep -l 'import os' {} +" | claude -p "解释这个命令做了什么"
# 将 CSV 转换为 Markdown 表格
cat data.csv | claude -p "把这个 CSV 转换为 Markdown 表格"
# 代码翻译:Python 转 TypeScript
cat utils.py | claude -p "将这段 Python 代码翻译为 TypeScript"[截图: git diff | claude -p 审查 Git 改动的实际效果]
重定向输出到文件
管道模式的输出可以重定向到文件,实现自动化处理:
bash
# 生成 API 文档并保存
cat src/routes/*.ts | claude -p "根据这些路由文件生成 API 文档" > docs/api.md
# 批量处理多个文件的审查报告
for f in src/*.ts; do
echo "=== $f ===" >> review-report.md
cat "$f" | claude -p "简要审查这段代码" >> review-report.md
done非交互模式 — 脚本和自动化中使用
管道模式 (-p) 本身就是非交互的。但你也可以不通过管道、直接传入提示词:
bash
# 直接传入提示词(不从 stdin 读取)
claude -p "在当前目录创建一个 .gitignore 文件,适合 Node.js 项目"
# 指定工作目录
claude -p "分析这个项目的依赖结构" --project ~/my-app在 CI/CD 中使用
Claude Code 可以嵌入你的持续集成流水线:
yaml
# GitHub Actions 示例
- name: AI Code Review
run: |
git diff ${{ github.event.before }}...${{ github.sha }} | \
claude -p "审查这些代码改动,输出 JSON 格式的问题列表" \
--output-format json \
--max-budget-usd 0.50bash
# 在部署脚本中使用
#!/bin/bash
ERRORS=$(npm run build 2>&1)
if [ $? -ne 0 ]; then
echo "$ERRORS" | claude -p "分析构建错误并给出修复步骤"
exit 1
fi[截图: GitHub Actions 中 Claude Code 自动审查 PR 的运行日志]
JSON 输出 — 方便程序处理
当你需要把 Claude Code 的输出对接到其他程序时,JSON 格式是最可靠的选择。
bash
# 输出 JSON 格式
claude -p "列出这个项目用到的所有第三方依赖及其版本" --output-format json输出示例:
json
{
"result": "...",
"cost_usd": 0.03,
"duration_ms": 4521,
"model": "claude-sonnet-4-20250514"
}结合 jq 处理 JSON
bash
# 提取纯结果文本
claude -p "分析这段代码" --output-format json | jq -r '.result'
# 获取花费金额
claude -p "审查代码" --output-format json | jq '.cost_usd'流式 JSON 输出
对于长输出,可以使用流式 JSON 模式,实时获取每一块输出:
bash
claude -p "详细分析项目架构" --output-format stream-json每一行是一个独立的 JSON 对象,方便逐行解析:
json
{"type":"text","content":"## 项目架构分析\n\n"}
{"type":"text","content":"### 目录结构\n\n"}
...
{"type":"result","cost_usd":0.05,"duration_ms":8200}预算控制 — 防止意外超支
Claude Code 按 token 计费,一个复杂任务可能消耗大量 token。预算控制帮你设定上限。
--max-budget-usd
限制单次调用的最大花费(单位:美元):
bash
# 限制单次最多花 1 美元
claude -p "重构整个项目的错误处理" --max-budget-usd 1.00
# 在自动化脚本中使用低预算
claude -p "快速审查这个 PR" --max-budget-usd 0.25如果达到预算上限,Claude Code 会停止当前任务并告诉你原因。已经完成的工作不会丢失。
[截图: 达到预算上限时终端显示的提示信息]
查看花费
交互模式下随时查看:
/cost命令行查看历史花费:
bash
# 查看最近的花费统计
claude cost预算管理建议
| 场景 | 建议预算 |
|---|---|
| 代码审查(单文件) | $0.10 - $0.25 |
| 功能开发(中等复杂度) | $0.50 - $2.00 |
| 大型重构 | $2.00 - $5.00 |
| CI/CD 自动化(每次触发) | $0.25 - $0.50 |
| 探索性问答 | $0.05 - $0.10 |
更多 CLI 参数速查
bash
# 指定模型
claude -p "快速回答" --model claude-sonnet-4-20250514
# 继续上次的会话
claude --resume
# 显示版本
claude --version
# 指定权限模式
claude --permission-mode acceptEdits
# 不加载 MCP 服务(加速启动)
claude --no-mcp
# 显示详细日志(调试用)
claude --verbose实战:打造你的 AI 工具链
把以上能力组合起来,你可以打造一套完整的 AI 辅助工具链:
bash
# ~/.bashrc 或 ~/.zshrc 中添加别名
# 快速审查当前 Git 改动
alias ai-review='git diff | claude -p "审查这些代码改动" --max-budget-usd 0.50'
# 解释错误日志
alias ai-log='tail -50 /var/log/app.log | claude -p "分析最近的错误" --max-budget-usd 0.25'
# 生成 commit message
alias ai-commit='git diff --cached | claude -p "为这些改动生成一个规范的 commit message,只输出 message 本身" --max-budget-usd 0.10'
# 快速代码审查并输出 JSON
alias ai-audit='claude -p "审查当前目录的代码质量,输出JSON格式的问题列表" --output-format json --max-budget-usd 1.00'[截图: 终端中使用 ai-review 别名快速审查 Git 改动的效果]
小结
- 管道模式 (
-p):把 Claude Code 变成 Unix 管道中的一环,组合无限可能 - 非交互模式:脚本和 CI/CD 中自动调用,无需人工干预
- JSON 输出 (
--output-format json):结构化输出,方便程序解析 - 预算控制 (
--max-budget-usd):给每次调用设上限,防止意外超支 - 通过 shell 别名把常用组合固化下来,打造你的个人 AI 工具链
安全提示:在 CI/CD 中使用 Claude Code 时,注意不要将敏感的环境变量(API 密钥、数据库密码)通过管道传给 Claude Code。虽然 Anthropic 不会用对话数据训练模型,但最佳实践是避免将密钥出现在任何对话中。使用
--max-budget-usd防止自动化流水线中的意外高额消费。