字节笔记本

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 ~/.zshrc

cenv 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****Jani

API 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
分享: