环境变量持久化

让 Hook 脚本记住上下文并传话给后续 Hook,实现多个 Hook 之间的状态共享与协同

实战19 分钟

一、一句话摘要


二、为什么需要环境变量持久化

Hook 进程之间没有共享内存。SessionStart Hook 检测到项目使用 pnpm,PreToolUse Hook 需要据此拦截 npm install 命令——两个独立进程,前者退出后所有局部变量消失,后者无从得知检测结果。

$CLAUDE_ENV_FILE 解决的就是跨 Hook 进程的信息传递问题。


三、核心内容

内置环境变量的可用范围

每个 Hook 脚本启动时,Claude Code 自动注入一组环境变量,无需配置:

环境变量内容
CLAUDE_PROJECT_DIR项目根目录绝对路径
CLAUDE_ENV_FILE环境变量持久化文件的路径

这两个是 command 类型 Hook 脚本中最常用的变量。CLAUDE_PROJECT_DIR 确定项目位置,CLAUDE_ENV_FILE 确定写入目标。

Hook 同时通过 stdin 接收 JSON 输入,包含更丰富的上下文:

JSON 字段内容
session_id当前会话标识符
transcript_path对话记录文件路径
cwdHook 触发时的工作目录
hook_event_name触发的事件名(如 PreToolUse
permission_mode当前权限模式

在 SubAgent 内运行时,JSON 输入额外包含 agent_idagent_type 两个字段。

持久化与共享规则

写入格式$CLAUDE_ENV_FILE 要求 Shell export 语句,不是 .env 格式的纯键值对。

格式要求的原因:Claude Code 在执行每次 Bash 命令前 source 这个文件。source 执行的是 Shell 脚本语法,只有 export 语句才能将变量导出到子进程环境。

付费内容

继续阅读完整课程

购买后即可解锁全部 16 个功能模块、实战场景与深度配置。

¥199¥399
  • 30 分钟完成第一个真实任务
  • 实战场景 + 深度配置
  • 长期访问,持续更新
Hooks 完全指南9/12