Appearance
16 · 并行任务与环境变量
📚 系列导航:上一篇 15 Memory 让 Claude 跨会话记住你。这一篇两件事:怎么让多会话并行跑不打架,以及怎么用环境变量把底层行为一次配死。
第一部分:并行任务
01 并行的铁律
并行成立的前提只有一个:任务别抢同一份文件。 两个会话 cd 进同一个目录改同一份文件,后写的盖住先写的——这就是最常见翻车场景。
Git worktree 就是来根治这个的:从同一个仓库历史里拉出几个独立的工作目录,各有各的文件和分支,共享同一套提交历史。
02 用 Worktree 隔离
bash
claude --worktree feature-authClaude 自动创建一个隔离的 worktree 在 .claude/worktrees/<名字>/,分支名 worktree-<名字>。
想再开第二个:
bash
claude --worktree bugfix-123两个会话各在自己的副本里,谁也碰不到谁的文件。
WARNING
三个坑:① .claude/worktrees/ 要进 .gitignore ② .env 不会自动复制进 worktree,靠 .worktreeinclude 文件列出要自动复制的文件 ③ 手改子代理文件后重启会话才生效
.worktreeinclude 文件(放项目根):
text
.env
.env.local
config/secrets.json03 多会话后台
把任务甩到后台:
bash
claude --bg "调查一下这个不稳定的测试为啥老挂"Claude 打印会话 ID 和管理命令。后台会话不绑在终端上,关掉 shell 也照跑。
把当前会话甩到后台: 敲 /bg(/background 的简写),当前对话挪到后台。
代理视图——塔台屏
bash
claude agents所有后台会话按状态分组列出来:
| 状态 | 含义 |
|---|---|
| 动画 | 工作中 |
| 黄色 | 需要你输入 |
| 绿色 | 已完成 |
| 红色 | 失败 |
操作:Space 窥视→直接回复→按 Enter 钻进完整会话→← 退回。后台会话自动用 worktree 隔离。
04 Headless 非交互
bash
claude -p "找出 auth.py 里的 bug 并修掉" --allowedTools "Read,Edit,Bash"非交互跑一次就退出。--allowedTools 预先批准工具,因为没人在旁边点「同意」。
管道数据:
bash
cat build-error.txt | claude -p "说清这个构建错误的根因" > output.txt--bare 更快启动: 跳过 hooks/skills/plugins/MCP/CLAUDE.md 的全量加载,脚本推荐:
bash
claude --bare -p "总结这个文件" --allowedTools "Read"官方说明:--bare 是脚本的推荐模式,将在未来版本中成为 -p 的默认值。
结构化输出:
bash
claude -p "总结这个项目" --output-format json | jq -r '.result'返回带元数据的 JSON(含 total_cost_usd 花了多少钱)。
第二部分:环境变量
05 环境变量管什么
环境变量是 Claude Code 启动时读的一组「键值对总开关」,管连接、认证、超时、隐私这些底层行为。它的价值在于把「每次都想这么来」的设置一次固化。
06 三种设置方式
| 方式 | 生效范围 | 关掉终端还在吗 | 最适合 |
|---|---|---|---|
shell 临时 export | 仅当前终端 | ❌ | 「就想这一次试试」 |
写进 ~/.zshrc 等 | 本机所有终端 | ✅ | 个人机器全局 |
写进 settings.json 的 env | 跟配置走 | ✅ | 跟项目/团队绑定 |
临时试试: export API_TIMEOUT_MS="1200000" → claude
持久生效(推荐 settings.json):
json
{
"env": {
"API_TIMEOUT_MS": "1200000",
"BASH_DEFAULT_TIMEOUT_MS": "300000"
}
}WARNING
改完环境变量必须退出重开 claude 才生效。
07 settings.json 四类文件
| 文件 | 管谁 | 进 git? |
|---|---|---|
~/.claude/settings.json | 你自己,所有项目 | ❌ |
.claude/settings.json(项目根) | 全队,该项目所有成员 | ✅ |
.claude/settings.local.json(项目根) | 你自己,仅该项目 | ❌ |
| 托管设置 | 全组织 | — |
WARNING
带个人凭据的变量(私有地址、token)一律放 .local 文件,别放进 git。
08 核心变量清单
连接与认证
| 变量 | 作用 | 注意 |
|---|---|---|
ANTHROPIC_API_KEY | API 密钥 | 设了它就盖过订阅登录,想换回订阅要 unset |
ANTHROPIC_BASE_URL | 把请求改道到代理/网关 | 接国产模型的核心 |
ANTHROPIC_MODEL | 默认模型 | /model 命令会盖过它 |
超时
| 变量 | 默认值 | 说明 |
|---|---|---|
API_TIMEOUT_MS | 600000(10 分钟) | 网络慢或走代理时调大;上限 2147483647,超过让计时器溢出 |
BASH_DEFAULT_TIMEOUT_MS | 120000(2 分钟) | 长命令不够用时调大 |
隐私
| 变量 | 作用 |
|---|---|
DISABLE_TELEMETRY=1 | 关掉遥测上报 |
DO_NOT_TRACK=1 | 同上,跨工具通用约定 |
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 | 一键全关(自动更新/反馈/报错/遥测) |
多账号与配置
| 变量 | 作用 |
|---|---|
CLAUDE_CONFIG_DIR | 覆盖配置目录,可并行跑多个账号 |
DISABLE_AUTO_COMPACT | 关掉自动压缩,自己掌控压缩时机 |
bash
alias claude-work='CLAUDE_CONFIG_DIR=~/.claude-work claude'09 优先级规则
总纲:环境变量 > 设置字段。 但模型这条链有例外:
text
/model 命令 / --model 标志 ← 最优先(当场选择)
↓ 盖过
ANTHROPIC_MODEL 环境变量 ← 其次
↓ 盖过
settings.json 的 model 字段 ← 兜底TIP
规律:越当场越明确,优先级越高。拿不准某个变量时,查官方文档那行说明。
10 动手:非交互模式跑一个任务
bash
mkdir parallel-demo && cd parallel-demo
echo 'def add(a,b): return a+b' > math.pybash
claude -p "给 @math.py 的 add 函数加上类型注解,并写一个测试用例"预期:Claude 非交互执行,修改文件并输出结果,然后退出。
11 小结
| 知识点 | 一句话 |
|---|---|
| 并行铁律 | 任务别抢同一份文件,用 worktree 隔离 |
| worktree | claude --worktree <名字> 一行开隔离会话 |
| 代理视图 | claude agents 塔台屏管多会话 |
| 后台任务 | --bg 甩出去不绑终端 |
| 非交互 | claude -p "指令",干完就退 |
| headless 优化 | --bare 更快,--output-format json 结构化输出 |
| 环境变量设置 | 临时 export / ~/.zshrc / settings.json 的 env |
| settings.json 四类文件 | 全局/项目共享/项目私有/托管 |
| 核心变量 | API key / BASE_URL / 超时 / 遥测 / 配置目录 |
NOTE
下一篇:17 Git 工作流:自动提交、冲突解决、检查点回退——把 Git 操作交给 Claude。