Claude CodeCLI自动化脚本
`claude -p "query"` — 通过 SDK 查询然后退出
掌握 claude -p 命令的完整用法,包括管道处理、输出格式控制、与 Shell 脚本集成,让 Claude Code 成为自动化工具链的一部分。
· 阅读约 6 分钟
claude -p(或 --print)是 Claude Code 的非交互模式。执行完任务后直接退出,不进入对话界面,特别适合脚本和自动化场景。
基本用法
# 执行一个任务,得到结果后退出
claude -p "解释 main.go 的核心逻辑"
# 结果会直接输出到 stdout
claude -p "用一句话描述这个项目" > summary.txt
管道(Pipe)输入
-p 模式可以通过管道接收内容:
# 分析错误日志
cat error.log | claude -p "分析这些错误,找出最可能的根本原因"
# 审查代码文件
cat src/auth.ts | claude -p "这段代码有什么安全问题?"
# 处理命令输出
git diff HEAD~1 | claude -p "总结这次提交做了哪些改动,写成中文 changelog"
# 分析 JSON 数据
curl -s https://api.example.com/stats | claude -p "分析这些数据,找出异常指标"
读取多个文件
# 同时传入多个文件内容
claude -p "对比这两个实现,哪个更好?" \
< <(cat src/old-impl.ts src/new-impl.ts)
# 或者在问题里直接引用文件路径(Claude Code 会自动读取)
claude -p "比较 src/old-impl.ts 和 src/new-impl.ts,哪个实现更好?"
控制输出格式
纯文本(默认)
claude -p "分析代码质量"
# 输出:格式化的文本回答
JSON 格式
适合脚本解析:
claude -p "分析以下代码的问题" \
--output-format json \
< src/utils.ts
输出结构:
{
"type": "result",
"subtype": "success",
"result": "分析结果...",
"cost_usd": 0.0012,
"duration_ms": 1823
}
流式 JSON(stream-json)
用于需要实时处理输出的场景:
claude -p "生成详细的代码文档" \
--output-format stream-json \
< src/api.ts | jq -r 'select(.type=="text") | .text'
控制输入格式
直接文本输入
echo "const x = 1" | claude -p "这行代码有什么问题"
JSON 格式输入
适合需要传入结构化数据的场景:
echo '{"role":"user","content":"分析这个函数"}' | \
claude -p --input-format json
在 Shell 脚本里使用
基础脚本模式
#!/bin/bash
# 代码质量检查脚本
RESULT=$(claude -p "检查 src/ 目录下的代码质量问题,只列出严重问题" \
--dangerously-skip-permissions)
if echo "$RESULT" | grep -q "严重"; then
echo "发现严重问题,请查看:"
echo "$RESULT"
exit 1
fi
echo "代码质量检查通过"
结合 jq 处理 JSON 输出
#!/bin/bash
# 获取结构化分析结果
ANALYSIS=$(claude -p "分析代码,以 JSON 格式输出:{issues: [], suggestions: []}" \
--output-format json \
< src/main.ts)
# 提取 result 字段
RESULT=$(echo "$ANALYSIS" | jq -r '.result')
# 进一步处理
echo "$RESULT" | jq '.issues[]'
批量处理文件
#!/bin/bash
# 批量生成代码注释
for file in src/**/*.ts; do
echo "处理: $file"
COMMENTS=$(claude -p "为这个文件的公开函数生成 JSDoc 注释" \
--dangerously-skip-permissions \
< "$file")
echo "$COMMENTS" > "${file%.ts}.docs.md"
done
和其他工具组合
与 git 结合
# 自动生成提交信息
git diff --staged | claude -p \
"根据这些代码改动,生成一个符合 conventional commits 规范的提交信息,只输出提交信息本身,不要解释"
# 生成 PR 描述
git log main..HEAD --oneline | claude -p \
"根据这些提交记录,生成一个 PR 描述(包含:做了什么、为什么、如何测试)"
与 CI/CD 结合
# GitHub Actions 示例
- name: Claude Code Review
run: |
git diff ${{ github.event.pull_request.base.sha }} | \
claude -p "审查这个 PR 的代码改动,找出潜在问题" \
--dangerously-skip-permissions \
--output-format json | \
jq -r '.result'
与日志分析结合
# 分析今天的错误日志
grep "ERROR" /var/log/app/$(date +%Y-%m-%d).log | \
claude -p "分析这些错误,按严重程度分类,给出处理建议"
超时和重试
# 设置超时时间(毫秒)
ANTHROPIC_TIMEOUT=30000 claude -p "快速任务"
# 简单的重试逻辑
for i in 1 2 3; do
if claude -p "任务描述" --dangerously-skip-permissions; then
break
fi
echo "第 $i 次失败,重试..."
sleep 5
done
注意事项
权限确认:-p 模式默认仍然需要权限确认(比如修改文件)。如果在脚本里不想中断,加上 --dangerously-skip-permissions,但要确保任务是安全的。
费用控制:-p 模式容易在脚本里被频繁调用,注意监控 API 用量,避免意外产生高额费用。
错误处理:-p 模式会在成功时退出码为 0,失败时退出码非 0,脚本里记得检查 $?。
claude -p "任务" || { echo "Claude Code 执行失败"; exit 1; }
标记本节教程为已读
记录您的学习进度,方便后续查看。