跳转到内容

cnb-rs ext exec

cnb-rs ext exec <NAME> [args...]

显式 dispatch 到 extension binary,与 unknown subcommand fallback 等价,但可以绕过命名冲突

何时需要

cnb-rs <name> [args]<name> 不是内置子命令时会自动 dispatch 到 extension,但若:

  • extension 命令名与某个内置命令同名(如未来某次 cnb-rs 升级新增 cnb-rs info 内置命令,而你已装 cnb-hello-info extension)
  • 调试 / 隔离测试(绕过 handle_removed_command_invocation 的 deprecation 拦截)

直接 cnb-rs <name> 会优先匹配内置命令,必须用 cnb-rs ext exec <name> 才能调到 extension。

参数

  • <NAME>:extension 命令名(不含 cnb- 前缀,例如 stats 表示 cnb-stats
  • [args...]:透传给 extension 的所有参数与 flag(保留 - / -- 前缀)

环境变量传递

子进程会继承父进程的所有环境变量,并额外注入:

变量含义
CNB_BIN当前 cnb-rs 可执行文件绝对路径
CNB_EXTENSION_NAME当前 extension 命令名(不含 cnb- 前缀)
CNB_DOMAIN解析后的 CNB 域名
CNB_REPO解析后的仓库路径(解析失败时不设置,避免误传空值)

详见 指南:cnb-rs extensions

退出码

子进程的退出码会透传给 cnb-rs 主进程,无中间封装。

示例

bash
# 显式调用 extension
$ cnb-rs ext exec hello world

# 透传 flag(保留 `-` / `--` 前缀)
$ cnb-rs ext exec stats --since 2026-01-01 --until 2026-12-31

# 嵌套调用(extension 反向调 cnb-rs api 拉数据)
$ cnb-rs ext exec whoami    # 等价于子进程内 `$CNB_BIN api /user --jq .username`

另请参阅

Released under the MIT License.