one exec
给任意命令注入项目环境变量,并在解析出的项目目录内执行。
one exec 解析项目,在配置了 Infisical 时注入变量,然后在项目目录执行命令。
工作区与全局执行都会遮盖 stdout、stderr 中的已知注入密钥值,保留普通日志格式和子进程退出码。遮盖覆盖多行值及其 JSON 转义形式,但不构成对子进程任意行为的隔离。
用法
one exec [-p <name|path>] [--env <env>] -- <cmd> [args...]
必须使用 -- 分隔 One 参数和子命令参数。项目也可以写成位置参数,例如 one exec web -- pnpm build。
参数
| 参数 | 说明 |
|---|---|
| `-p, --project <name | path>` |
--env <env> | 使用指定环境;默认取 manifest 的默认环境 |
--dry-run | 仅输出目录、原始参数和 runtime,不执行 mise、不读取密钥、不启动命令 |
-o, --output <fmt> | 只影响 One CLI 自己的输出;子进程 stdout/stderr 保留格式并遮盖已知注入密钥 |
交互模式
one exec 没有交互式向导;它按参数解析项目、环境和子命令。子命令参数放在 -- 后面。
mise 工具环境
命令和原有参数保持不变。根目录存在 One 生成的 mise.toml 时,one exec 自动通过 mise 准备项目工具和环境,再注入 One 环境变量并执行原始命令。新 workspace 自动生成该配置;旧 workspace 未启用时继续使用原有工具。
覆盖顺序为:父进程环境 → mise 环境 → 当前项目的 One 环境变量。项目目录、参数边界、标准 IO 和应用退出码保持原有语义,不需要 mise activate。
无需单独安装 mise:One 优先使用兼容的系统版本,否则复用或从官方下载到自己的目录;本地没有可用程序时首次运行需要联网,程序被删后会按需恢复。创建工作区和添加项目时自动信任完整的 One 生成配置;自定义配置继续遵循 mise 规则,审查后通过 one mise trust 授权。离线配置见 One 自动管理 mise,旧项目启用和版本调整见 one init mise。
示例
one exec -- pnpm test
one exec -p web -- pnpm run build
one exec -p apps/web -- pnpm lint
one exec --env staging -- pnpm run e2e
子进程总在解析出的项目目录里运行,因此 npm start、pnpm build、go test ./... 会看到项目自己的配置文件。
PATH 与环境变量
one exec 会把环境变量 merge 到子进程环境里,默认覆盖同名 shell 变量。同时它会把下面路径注入 PATH 前面:
<project>/node_modules/.bin
<workspace>/node_modules/.bin
这样在 pnpm monorepo 里直接执行 vite、next、astro 等二进制也能解析到。
Infisical 注入
Manifest 顶层 env 绑定启用 Infisical 注入。未绑定或设置 projects[].env.disabled: true 时,命令继承 shell 环境。One CLI 不加载 .env 文件,认证或拉取失败会停止执行,不回退到本地文件。通过 one login 登录。
错误恢复
| 错误码 | 处理 |
|---|---|
NOT_ONE_PROJECT | 在 workspace 内运行,或进入某个项目目录 |
SUBPROJECT_NOT_FOUND | -p 改成 manifest 里的 name 或 relativeDir |
RUN_COMMAND_NOT_FOUND | 确认命令在 PATH、项目 node_modules/.bin 或 workspace node_modules/.bin 内 |
INFISICAL_AUTH_MISSING | 先 one login |
完整码表:错误码大全。
进一步阅读
使用全局凭据
one exec --global --env dev --path /oss --keys OSS_ACCESS_KEY_ID,OSS_ACCESS_KEY_SECRET -- upload-assets
one exec --global --env dev --path /oss --dry-run -- upload-assets
环境和目录必须显式指定。只读取该层目录,指定 --keys 时只获取所选变量;dry-run 不读取凭据。全局模式不加载项目环境或仓库内的隐式命令路径。命令在当前目录运行;输出遮盖仅尽力匹配原始密钥值,不是安全沙箱。