字
字节笔记本
2026年2月23日
cenv-cli:终端环境变量分组管理工具,一条命令切换 API Key
cenv-cli 是一个 Node.js 命令行工具,用于管理和快速切换环境变量分组。它解决了开发者在多个 API Key、多套服务配置之间反复切换的痛点,切换操作直接在当前终端会话生效,无需重新 source 文件。
为什么需要 cenv-cli
开发者通常需要维护多套环境配置:
- 本地开发使用自建代理的 API Key
- 测试环境使用测试账号的 Key
- 不同的 AI 服务商(OpenAI、Anthropic、GLM 等)之间切换
传统方式是手动 export 或修改 .env 文件,繁琐且容易出错。cenv-cli 将这些配置保存为命名分组,一条命令即可切换。
安装
bash
npm install -g cenv-cli安装后获得 cenv 命令。
首次设置(必须)
由于 Node.js 子进程无法直接修改父 shell 的环境变量,cenv-cli 通过注入一个 shell function 来解决这个问题:
bash
# 第一步:安装 shell function(只需执行一次)
cenv init
# 第二步:加载到当前终端
source ~/.zshrccenv init 会在 ~/.zshrc(或 ~/.bashrc)中写入:
bash
cenv() { eval "$(command cenv --eval "$@")"; }这个 function 将 cenv use 输出的 export 语句通过 eval 直接在父 shell 中执行,实现当前会话的环境变量修改。
之后新打开的终端无需再次 source,自动生效。
核心工作原理
text
cenv use prod
↓
shell function 拦截
↓
eval "$(command cenv --eval use prod)"
↓
node 进程 stdout 输出:
export ANTHROPIC_BASE_URL='...'
export ANTHROPIC_API_KEY='...'
↓
eval 在父 shell 执行 → 当前会话生效 ✓信息输出(✓ 提示、变量列表)走 stderr,不会被 eval 捕获,因此终端显示正常。
基本用法
查看所有分组
bash
cenv list输出示例:
text
环境变量分组列表:
▶ default (2 个变量)
glm (2 个变量)
prod (3 个变量)▶ 标记当前激活的分组。
切换分组
bash
cenv use default立即输出:
text
✓ 已切换到分组: default
ANTHROPIC_BASE_URL = https://gaccodeapi.com/
ANTHROPIC_API_KEY = sk-IXi0****JaniAPI Key 类变量自动打码显示,保护敏感信息。
验证切换结果
bash
echo $ANTHROPIC_BASE_URL
echo $ANTHROPIC_API_KEY查看分组详情
bash
# 查看指定分组
cenv show prod
# 查看当前激活分组
cenv show查看当前激活分组
bash
cenv current管理分组
创建分组(交互式)
bash
cenv add prod进入交互模式,逐行输入 KEY=VALUE,空行结束:
text
创建分组: prod
输入 KEY=VALUE,空行结束:
> ANTHROPIC_BASE_URL=https://api.anthropic.com/
✓ ANTHROPIC_BASE_URL 已设置
> ANTHROPIC_API_KEY=sk-ant-xxx
✓ ANTHROPIC_API_KEY 已设置
> AWS_REGION=us-east-1
✓ AWS_REGION 已设置
>
✓ 分组 "prod" 已创建,包含 3 个变量
使用 cenv use prod 激活快速设置单个变量
bash
cenv set prod ANTHROPIC_API_KEY=sk-new-key如果该分组是当前激活分组,变量会同步 export 到当前会话。
重命名分组
bash
cenv rename prod production删除分组
bash
cenv del staging配置文件
所有分组保存在 ~/.cenv/groups.json,纯 JSON 格式,可直接手动编辑:
json
{
"active": "default",
"groups": {
"default": {
"ANTHROPIC_BASE_URL": "https://gaccodeapi.com/",
"ANTHROPIC_API_KEY": "sk-IXi0jXBkYJani"
},
"glm": {
"ANTHROPIC_BASE_URL": "https://api.z.ai/api/anthropic",
"ANTHROPIC_API_KEY": "aebbed********************cb6da.J1Uf****Z6zH"
}
}
}典型使用场景
场景一:多 AI 服务商切换
bash
# 创建不同 AI 服务商的分组
cenv add anthropic # 官方 API
cenv add proxy # 自建代理
cenv add glm # GLM 兼容接口
# 按需切换
cenv use anthropic
claude "帮我写代码"
cenv use glm
claude "换个服务商试试"场景二:开发/测试环境隔离
bash
cenv add dev
cenv add test
cenv add staging
# 跑测试前切换到测试环境
cenv use test && npm test场景三:批量变量管理
对于需要同时管理多个变量的复杂配置,直接编辑 ~/.cenv/groups.json 文件,比逐条 set 更高效:
json
{
"groups": {
"full-stack": {
"ANTHROPIC_API_KEY": "sk-xxx",
"DATABASE_URL": "postgresql://...",
"REDIS_URL": "redis://...",
"AWS_ACCESS_KEY_ID": "AKIA...",
"AWS_SECRET_ACCESS_KEY": "..."
}
}
}然后 cenv use full-stack 一次性激活所有变量。
命令速查
| 命令 | 说明 |
|---|---|
cenv init | 安装 shell function(首次必须) |
cenv use <分组> | 切换分组,当前会话立即生效 |
cenv list | 列出所有分组 |
cenv show [分组] | 查看分组变量 |
cenv add <分组> | 创建/更新分组(交互式) |
cenv set <分组> KEY=VALUE | 设置单个变量 |
cenv del <分组> | 删除分组 |
cenv rename <旧名> <新名> | 重命名分组 |
cenv current | 显示当前激活分组 |
兼容性
- Node.js >= 14
- Shell:zsh、bash 均支持,自动检测并写入对应的 rc 文件
- 系统:macOS、Linux
分享: