跳转到内容

Unix 管道哲学

Unix 之美在于小工具可组合:每个程序只做一件事,但 stdin/stdout 让它们能像积木一样拼成更大的流程。cat 读文件、grep 过滤、wc 计数——三者一拼就是「统计某类行数」的流水线。

Claude Code 是这条流水线上的新工位。它的输入接 stdin,输出走 stdout,本身就是 Unix 哲学的好公民。把日志喂给它,它告诉你异常在哪;把 PR diff 喂给它,它给出审查意见。管道是 Claude Code 的灵魂——它不是个孤立的聊天框,而是一个能嵌进任何流水线的智能滤芯。

Claude Code 接受 stdin 输入。把任何东西 pipe 进去,它都会当作上下文:

Terminal window
# 看一段日志,问它在解释什么
cat app.log | claude -p "explain"
# 跟着一段文件,让它解释代码
cat src/auth.ts | claude -p "explain"

-p 是 headless 模式开关(详见 Headless 模式)。带 -p 跑完即退,不带 -p 会进交互模式——脚本里要小心。

最经典的运维场景:盯着一条日志流,发现异常就报警。

Terminal window
tail -f app.log | claude -p "Slack me if you see anomalies"

tail -f 持续追加新日志行,Claude 边读边判断什么是异常,看到就触发通知。比起你写一堆正则去匹配「什么算异常」,让 Claude 用语义判断更省心——它能识别「连接超时」「磁盘满」「权限被拒」这些跨模式的语义信号,而不仅仅匹配关键字。

实际部署时,配上 --mcp-config 把 Slack MCP 服务器挂上,Claude 就能真的把消息发出去;否则它会输出到 stdout,由你的脚本接管转发。

GitHub CLI gh 把 PR 的 diff 喂给 Claude,立刻拿到审查意见:

Terminal window
gh pr diff 1234 | claude -p "Review this PR for security and correctness"

更进一步,做成一个 CI 步骤——每个新 PR 自动跑一遍,结果落盘当审查报告:

Terminal window
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

测试失败、CI 挂了,错误日志动辄几百行——让 Claude 先扫一眼,给你一句话结论:

Terminal window
cat error.log | claude -p "What's the root cause in one paragraph?"

或者更直接,直接交互模式看:

Terminal window
cat error.log | claude

进交互模式后,你可以追问「这个错误第一次出现在哪一行」「跟昨天的 PR 有没有关系」。

管道 + headless 在 CI 里最有威力。一个常见场景:新文案需要翻译成多语言并提交 PR

#!/bin/bash
# 提取待翻译的新文案,让 Claude 翻译成法语,再开 PR
gh 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
# 翻译完,把改动提交并开 PR
git checkout -b chore/i18n-french
git 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——人只看最后一眼。

为什么管道是 Claude Code 的灵魂?因为它和 Unix 三十年沉淀下来的工具链无缝兼容

工具 角色 喂给 Claude 做什么
cat 读文件 解释、总结、审查
tail -f 流式日志 异常检测、报警
grep 过滤 缩小上下文范围
gh pr diff PR 变更 代码审查
git log 提交历史 生成 changelog
kubectl logs 容器日志 排查故障
curl HTTP 响应 解析 API 返回

每个都是某个领域的专家工具,串上 Claude 后立刻获得「能理解语义」的能力。你不需要为每个工具写新的解析逻辑——Claude 是通用的语义层

Terminal window
# 把今天的提交交给 Claude 生成 changelog
git 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."

管道好用,但也有几条注意:

  1. headless 必带 -p:脚本里 cat file | claude "explain" 会进交互模式挂住,永远要带 -p
  2. stdin 是上下文不是指令:管道喂进去的内容会被当成素材,真正的指令在 -p 的 prompt 里。
  3. 大输入要小心 token:日志喂太多会撑爆上下文窗口,先用 grep/head 缩小范围。
  4. 流式输入有专门格式:多轮结构化对话用 --input-format stream-json,详见 结构化输出

Unix 管道让小工具各自专精、自由组合;Claude Code 接 stdin、出 stdout,是这条流水线上的语义滤芯。把 cat/tail/gh 喂给它,它就把字节流变成判断、建议和行动。

下一篇看 结构化输出,了解 --output-format json--json-schema 怎么让 Claude 吐出可程序化解析的结果。🔌