--- summary: "环境变量源和优先级、内联环境配置、shell 环境导入、替换和秘密引用" title: "环境变量" sidebarTitle: "环境变量" read_when: - "决定 API 密钥的存放位置" - "在配置值中使用 ${VAR} 替换" - "将配置字段指向秘密引用" --- ## 环境变量 OpenClaw 会从父进程以及以下位置读取环境变量: - 当前工作目录中的 `.env`(如果存在) - `~/.openclaw/.env`(全局回退) 这两个文件都不会覆盖已有的环境变量。你也可以在配置中设置内联环境变量: ```json5 { env: { vars: { OPENROUTER_API_KEY: "sk-or-...", GROQ_API_KEY: "gsk-...", }, }, } ``` 如果启用且预期的键未设置,OpenClaw 会运行你的登录 Shell,并且只导入缺失的键: ```json5 { env: { shellEnv: { enabled: true, timeoutMs: 15000 }, }, } ``` 环境变量等价形式:`OPENCLAW_LOAD_SHELL_ENV=1`。默认 `timeoutMs`:`15000`。 可在任何配置字符串值中使用 `${VAR_NAME}` 引用环境变量: ```json5 { gateway: { auth: { token: "${OPENCLAW_GATEWAY_TOKEN}" } }, models: { providers: { custom: { apiKey: "${CUSTOM_API_KEY}" } } }, } ``` 规则: - 仅匹配大写名称:`[A-Z_][A-Z0-9_]*` - Missing/empty 变量明显未解决,发出警告,并且无法提供给需要该值的消费者 - Escape 与 `$${VAR}` 一起生成文字 `${VAR}` 值 - 可在 `$include` 文件中使用 - 内联替换:`"${BASE}/v1"` → `"https://api.example.com/v1"` 对于支持 SecretRef 对象的字段,你可以使用: ```json5 { models: { providers: { openai: { apiKey: { source: "env", provider: "default", id: "OPENAI_API_KEY" } }, }, }, skills: { entries: { "image-lab": { apiKey: { source: "file", provider: "filemain", id: "/skills/entries/image-lab/apiKey", }, }, }, }, channels: { googlechat: { serviceAccount: { source: "exec", provider: "vault", id: "channels/googlechat/serviceAccount", }, }, }, } ``` 上面的 `env` 引用使用内置的 `default` 提供程序,并且不需要 `secrets.providers.default` 条目,除非 `secrets.defaults.env` 选择另一个别名。相同的规则适用于 `store` 参考和 `secrets.defaults.store`。有关提供程序优先级和所需的 `file`/`exec` 提供程序配置,请参阅 [Secrets Management](/gateway/secrets#secretref-contract)。 [SecretRef 凭证 Surface](/reference/secretref-credential-surface) 中列出了受支持的凭证路径。 完整优先级和来源请参见 [环境](/help/environment)。