one env

使用 set、unset、list 管理 Infisical 变量,并在命令执行时直接注入。

约 6 分钟3 天前更新在 GitHub 编辑

Infisical 是 One CLI 唯一管理的环境变量来源。变量在执行命令时拉取并注入子进程,One CLI 不读取、写入或导出 .env 文件。

绑定工作区

新工作区没有 Infisical 绑定,无需登录即可运行。需要托管变量时先执行 one login,再通过 one env bind 显式绑定。交互终端中可以选择已有项目或创建工作区项目;脚本使用 --create 创建并绑定,或通过 --project-id 绑定已有项目。已有绑定会保留,重复创建命令不会新建另一个项目。

one login
one env bind
one env bind --create
one env bind --project-id PROJECT_ID

set、list、读取与 unset 都要求已有绑定。未绑定时返回 INFISICAL_NOT_CONFIGURED 并提示运行 one env bind,不会自动创建项目。Dashboard 在工作区设置和变量页面提供「绑定 Infisical」按钮,可自动创建工作区项目或选择已有项目。面板展示绑定目标,确认后保存绑定并允许添加变量;保存变量不会初始化绑定。

绑定保存在 one.manifest.toml 中的 [env.infisical] 表:

[env.infisical]
siteUrl = "https://app.infisical.com"
projectId = "your-project-id"
environments = ["dev", "staging", "prod"]

Manifest 只记录绑定信息和环境 slug。值保存在 Infisical,登录使用系统 keyring 中的浏览器会话。

命令

one env
one env set DATABASE_URL -p api
one env set API_URL=https://example.com -p web --env dev --yes
one env set SIGNING_PRIVATE_KEY -p api --env dev --stdin < /secure/private-key.pem
one env list -p web --env dev

多行 PEM 和其他秘密可以通过 --stdin 读取,无需把内容放进命令参数。项目变量和 --global 共享凭据都支持该方式,保留内部换行,只去掉一个结尾换行符。输入上限为 1 MiB,不能同时提供参数值。覆盖已有变量仍需确认或显式指定 --yes。

终端中的 set KEY 会隐藏输入值;脚本显式传入值。--yes 确认覆盖已有值或新增环境名。list 只返回变量名。CLI 不提供明文读取命令;通过 one exec 将值注入子进程。-o json 或 -o yaml 输出结构化结果,保留 one-cli/env-set/v1、one-cli/env-list/v1 协议。

-p / --project 接受项目名或工作区相对路径。不传时按当前目录推断项目;在工作区根目录操作共享变量,交互式 set 会提供作用域选择。

环境与目录

env.infisical.environments 声明远程环境 slug。默认固定使用 dev,通过 --env 选择其他已声明环境。新绑定默认声明 dev、staging、prod,对应 Infisical 的环境标识,而不是界面展示名称。声明名称不会自动创建远程环境。

set 经确认且远程写入成功后,可以在本地登记新环境名;对应环境必须已存在于 Infisical。list 对未声明名称返回 ENV_UNKNOWN_ENVIRONMENT。

共享目录固定为 /。项目目录从 path 推导:services/api 对应 /services/api。变量依次合并 /、/services 和 /services/api,更具体的目录优先。并行任务各自接收所属项目的变量,不提供项目级目录、继承、变量名清单或停用设置。

带变量执行

one exec -p api --env dev -- go run ./cmd/server
one run dev --env dev

配置 [env.infisical] 后,one run 和 one exec 按项目拉取变量,覆盖同名 shell 变量。未绑定时继承 shell 环境;认证或拉取失败会停止执行。One 不输出拉取到的变量值;子进程的 stdout、stderr、ANSI 色彩和格式保持原样。

全局共享凭据

共享凭据独立于工作区。通过 one env bind --global 自动创建或复用默认存储项目,已有绑定会保留;--create 仅用于工作区绑定,不能与 --global 同时使用;也可以通过 --project-id 绑定其他已有项目。使用 one env list --global --env dev --path / 查看名称,使用 one exec --global --env dev --path /folder -- command 注入明确作用域。详见登录与共享凭据。

常见错误

错误码恢复方法
INFISICAL_NOT_CONFIGURED登录后运行 one env bind 显式绑定存储项目
INFISICAL_AUTH_MISSING / INFISICAL_AUTH_FAILED执行 one login 并检查绑定项目的访问权限
INFISICAL_PROJECT_NAME_TAKEN在 Dashboard 选择已有项目,或使用不同的工作区名称
INFISICAL_PROJECT_CREATE_FORBIDDEN在 Dashboard 选择已有且可访问的项目
ENV_KEY_NOT_FOUND检查变量名、环境和目录
ENV_INVALID_KEY变量名须匹配 ^[A-Za-z_][A-Za-z0-9_]*$
ENV_SET_OVERWRITE_REQUIRED确认替换后添加 --yes
ENV_UNKNOWN_ENVIRONMENT通过 set 登记新环境,或选择已有名称

配置结构参阅 Manifest v2,初次配置参阅操作教程。

工作区绑定期间如果登录状态变化,One 会拒绝保存配置。若远程项目已创建,错误会返回项目 ID;确认账号后可通过 --project-id 重试连接该项目。

同名工作区

one env bind --create 默认使用工作区名称;名称冲突时自动添加短后缀,并显示实际名称。不同工作区不会仅因同名而共用变量,写入目标由 env.infisical.projectId 确定。复制或克隆包含绑定的配置会继续使用同一远程项目。变量保存失败不会改变已有绑定。