Unix 管道哲学
Unix 管道哲学
Section titled “Unix 管道哲学”Unix 之美在于小工具可组合:每个程序只做一件事,但 stdin/stdout 让它们能像积木一样拼成更大的流程。cat 读文件、grep 过滤、wc 计数——三者一拼就是「统计某类行数」的流水线。
Claude Code 是这条流水线上的新工位。它的输入接 stdin,输出走 stdout,本身就是 Unix 哲学的好公民。把日志喂给它,它告诉你异常在哪;把 PR diff 喂给它,它给出审查意见。管道是 Claude Code 的灵魂——它不是个孤立的聊天框,而是一个能嵌进任何流水线的智能滤芯。
最朴素的喂法:stdin
Section titled “最朴素的喂法:stdin”Claude Code 接受 stdin 输入。把任何东西 pipe 进去,它都会当作上下文:
# 看一段日志,问它在解释什么cat app.log | claude -p "explain"
# 跟着一段文件,让它解释代码cat src/auth.ts | claude -p "explain"-p 是 headless 模式开关(详见 Headless 模式)。带 -p 跑完即退,不带 -p 会进交互模式——脚本里要小心。
监控日志:tail -f + Claude
Section titled “监控日志:tail -f + Claude”最经典的运维场景:盯着一条日志流,发现异常就报警。
tail -f app.log | claude -p "Slack me if you see anomalies"tail -f 持续追加新日志行,Claude 边读边判断什么是异常,看到就触发通知。比起你写一堆正则去匹配「什么算异常」,让 Claude 用语义判断更省心——它能识别「连接超时」「磁盘满」「权限被拒」这些跨模式的语义信号,而不仅仅匹配关键字。
实际部署时,配上 --mcp-config 把 Slack MCP 服务器挂上,Claude 就能真的把消息发出去;否则它会输出到 stdout,由你的脚本接管转发。
PR 审查:gh pr diff + Claude
Section titled “PR 审查:gh pr diff + Claude”GitHub CLI gh 把 PR 的 diff 喂给 Claude,立刻拿到审查意见:
gh pr diff 1234 | claude -p "Review this PR for security and correctness"更进一步,做成一个 CI 步骤——每个新 PR 自动跑一遍,结果落盘当审查报告:
gh pr diff "$PR_NUMBER" | claude -p \ --append-system-prompt "You are a senior reviewer. Be specific and cite line numbers." \ --output-format json \ --allowedTools "Read,Grep" \ > review.json报错日志速读
Section titled “报错日志速读”测试失败、CI 挂了,错误日志动辄几百行——让 Claude 先扫一眼,给你一句话结论:
cat error.log | claude -p "What's the root cause in one paragraph?"或者更直接,直接交互模式看:
cat error.log | claude进交互模式后,你可以追问「这个错误第一次出现在哪一行」「跟昨天的 PR 有没有关系」。
CI 场景:自动翻译并提 PR
Section titled “CI 场景:自动翻译并提 PR”管道 + headless 在 CI 里最有威力。一个常见场景:新文案需要翻译成多语言并提交 PR。
#!/bin/bash# 提取待翻译的新文案,让 Claude 翻译成法语,再开 PRgh pr diff main...feature-copy | \ claude -p "Translate the new user-facing strings to French and apply the changes." \ --allowedTools "Read,Edit,Bash" \ --permission-mode acceptEdits \ --output-format json
# 翻译完,把改动提交并开 PRgit checkout -b chore/i18n-frenchgit add .git commit -m "chore(i18n): translate new strings to French"gh pr create --title "i18n: French translations" --body "Auto-generated by Claude Code"把这段套进 GitHub Actions / GitLab CI,每加一条新文案就自动产出法语 PR——人只看最后一眼。
Unix 哲学:可组合、可脚本
Section titled “Unix 哲学:可组合、可脚本”为什么管道是 Claude Code 的灵魂?因为它和 Unix 三十年沉淀下来的工具链无缝兼容:
| 工具 | 角色 | 喂给 Claude 做什么 |
|---|---|---|
cat |
读文件 | 解释、总结、审查 |
tail -f |
流式日志 | 异常检测、报警 |
grep |
过滤 | 缩小上下文范围 |
gh pr diff |
PR 变更 | 代码审查 |
git log |
提交历史 | 生成 changelog |
kubectl logs |
容器日志 | 排查故障 |
curl |
HTTP 响应 | 解析 API 返回 |
每个都是某个领域的专家工具,串上 Claude 后立刻获得「能理解语义」的能力。你不需要为每个工具写新的解析逻辑——Claude 是通用的语义层。
# 把今天的提交交给 Claude 生成 changeloggit log --since="1 day ago" --pretty=format:"%h %s" | \ claude -p "Generate a changelog grouped by feature area."
# 把 kubectl 日志交给 Claude 排查故障kubectl logs -f api-pod | claude -p "Diagnose the issue and suggest fixes."管道里的纪律
Section titled “管道里的纪律”管道好用,但也有几条注意:
- headless 必带
-p:脚本里cat file | claude "explain"会进交互模式挂住,永远要带-p。 - stdin 是上下文不是指令:管道喂进去的内容会被当成素材,真正的指令在
-p的 prompt 里。 - 大输入要小心 token:日志喂太多会撑爆上下文窗口,先用
grep/head缩小范围。 - 流式输入有专门格式:多轮结构化对话用
--input-format stream-json,详见 结构化输出。
Unix 管道让小工具各自专精、自由组合;Claude Code 接 stdin、出 stdout,是这条流水线上的语义滤芯。把
cat/tail/gh喂给它,它就把字节流变成判断、建议和行动。
下一篇看 结构化输出,了解 --output-format json 和 --json-schema 怎么让 Claude 吐出可程序化解析的结果。🔌