
CLI 的 -p(--print)模式是把 Claude Code 从交互工具变成可编程组件的关键开关。本篇完整拆解三种输出格式(text/json/stream-json)的选型逻辑、--max-turns/--max-budget-usd 防止脚本失控、--bare 最小模式加速批量启动、--exclude-dynamic-system-prompt-sections 提升 CI 缓存命中率、系统 Prompt 追加 vs 替换策略、后台会话的脚本管理,以及一个把这些标志组合成完整 CI 审查脚本的实战示例,附五条可落地的实践建议。
cat、bash、Python、CI/CD 直接调用的命令行组件。这张脸的入口只有一个标志:-p(--print)。-p 背后那套完整的「自动化标志体系」,Claude Code 就变成了你流水线里的一个可编程节点——接受 stdin、输出 JSON、控制预算、限制轮次、快速启动、提升缓存命中率。-p 是什么:把交互模式变成管道组件claude 命令会启动一个交互式 TUI 会话。加上 -p(--print)之后,行为完全不同:claude -p "解释这个函数"|、> 或脚本捕获。cat error.log | claude -p "分析这段报错,给出最可能的原因和修复建议"| 格式 | 标志 | 适用场景 |
|---|---|---|
text | 默认或 --output-format text | 人类可读输出、Shell 脚本直接处理字符串 |
json | --output-format json | 结构化结果,Python/Node 解析 ResultMessage |
stream-json | --output-format stream-json | 实时处理每条消息,搭配 --verbose + --include-partial-messages |
json 模式下,输出是完整的 ResultMessage 对象,包含 result(最终文本)、total_cost_usd(本次花费)、num_turns(实际轮次数)、usage.cache_read_input_tokens(缓存命中量)等字段——可直接用于成本审计和日志追踪。# 拿到 JSON 后用 jq 提取结果和花费
claude -p "重构 utils.py 中的 parse_config 函数" \
--output-format json | jq '{result: .result, cost: .total_cost_usd}'stream-json 是 #11 期介绍的流式输出在 CLI 层的等价物:每条 StreamEvent 实时落到 stdout,适合构建进度 UI 或需要工具调用实时可见性的场景。# 最多跑 5 轮,超出则以错误退出
claude -p "找出 src/ 下所有潜在的 SQL 注入漏洞" \
--max-turns 5
# 最多花 2 美元,超出则停止
claude -p "批量注释 api/ 目录下每个函数" \
--max-budget-usd 2.00--max-turns 超限会以非零退出码退出,可在 Shell 中用 || 或 $? 捕获。--max-budget-usd 在预算耗尽时同样中止任务。两个标志都只在 -p 模式下生效。
--bare vs 完整模式的功能差异,AI 生成示意图 --bare:最小模式,加速脚本启动claude --bare -p "校对这段文档,只修改明显的语法错误"--bare 的效果:CLAUDE_CODE_SIMPLE=1 可替代 --bare--exclude-dynamic-system-prompt-sections:CI 场景的缓存命中率利器claude -p \
--exclude-dynamic-system-prompt-sections \
"分析这个 TypeScript 项目的依赖关系"--system-prompt 替换了整个系统 Prompt,此标志自动失效。
# 追加策略:保留默认工具指引 + 补充领域规则
claude -p \
--append-system-prompt "始终用中文回复,代码注释也用中文" \
"重构 database.ts 的连接池逻辑"
# 替换策略:完全自定义(需自行包含工具说明)
claude -p \
--system-prompt-file ./prompts/code-reviewer.txt \
"review 这个 PR 的安全问题"--append-system-prompt / --append-system-prompt-file):你希望 Claude 仍是一个编程助手,只是额外遵循你的规则。默认工具指引和安全限制保留。--system-prompt / --system-prompt-file):你的场景跟编程无关,或者需要完全不同的 Identity。替换会丢弃默认工具指引和安全约束,适合完全受控的非交互 Pipeline。# 继续最近的会话(print 模式)
claude -c -p "刚才找到的那个 bug,现在帮我写单元测试覆盖"--fork-session 可以在 resume 时创建新 session ID,避免污染原会话历史:claude --resume auth-refactor --fork-session -p "基于这个会话做一个只读分析"# 不保存到磁盘,不可恢复,适合敏感批量任务
claude -p --no-session-persistence "分析这段包含密钥的配置文件"CLAUDE_CODE_SKIP_PROMPT_HISTORY=1。#!/bin/bash
set -euo pipefail
DIFF=$(git diff HEAD~1)
RESULT=$(echo "$DIFF" | claude -p \
--output-format json \
--max-turns 3 \
--max-budget-usd 1.00 \
--bare \
--exclude-dynamic-system-prompt-sections \
--append-system-prompt "仅报告安全漏洞和严重 bug,不报告风格问题" \
"分析这个 diff,找出安全漏洞和严重 bug")
REVIEW=$(echo "$RESULT" | jq -r '.result')
COST=$(echo "$RESULT" | jq -r '.total_cost_usd')
echo "审查完成,花费:\$${COST}"
echo "$REVIEW"--max-turns 3)和预算(--max-budget-usd 1.00)--bare 跳过不需要的扩展加快启动--exclude-dynamic-system-prompt-sections 提升缓存命中率--append-system-prompt 限定审查范围claude agents --json:后台会话的脚本管理-p 模式是同步的——调用等结果。Claude Code 还支持后台会话,适合长时任务:# 启动后台 Agent,立即返回 session ID
claude --bg "调查 flaky test 的根因,生成分析报告"
# 以 JSON 格式列出所有活跃的后台会话(适合脚本解析)
claude agents --json
# 查看某个后台会话的实时输出
claude logs 7c5dcf5dclaude agents --json 输出的数组包含 session ID、启动时间、当前状态,可直接用 jq 处理,适合构建多 Agent 编排脚本。text vs json 按消费者决定:人类脚本或 bash 处理字符串,用默认 text;需要解析 ResultMessage 字段(cost、turns、usage)用 json;需要实时流用 stream-json。--bare 是批量脚本的默认选项:除非你明确需要 MCP 工具或 Hooks,批量任务都应加 --bare,减少不必要的启动发现流程。--exclude-dynamic-system-prompt-sections:这个标志在单机运行几乎感觉不到差异,但在并行 CI 环境能显著提升缓存命中率,直接降低成本。--max-turns 和 --max-budget-usd 作为安全网,不可省略:生产脚本里不带这两个限制,等于开了一个没有上限的 API 调用入口。--append-system-prompt 优先于 --system-prompt:除非你的场景跟编程工具完全不同,否则追加比替换安全——你不需要自己重新编写工具指引和安全说明。--ide 标志、VS Code / JetBrains 集成、诊断信息如何从 IDE 流入 Agent 上下文、/add-dir 多目录权限边界。docs.anthropic.com
docs.anthropic.com
This story was produced automatically by a channel. One sentence is all it takes for Neodrop to keep producing for you.