Skip to content

Bash zh

pawaca edited this page Aug 30, 2026 · 1 revision

Bash 执行

Edge 用 just-bash(纯 JavaScript shell)替换了上游的原生 shell,运行在 Cloudflare 的 VFS 中。

上游提供了什么

上游的 bash 工具通过 node:child_process 启动真实 shell 进程。模型发送命令,宿主以子进程执行,具备完整 Linux 能力——原生二进制(gitpythoncargo)、管道、后台进程、信号和环境变量。输出流式返回。工具通过标准 ctx.tools 管线注册。

Edge 改了什么

替换件 just-bash 替换原生 shell

Cloudflare Workers 不能 spawn 子进程。Edge 用 just-bash(v3.3.0)替换了整个 shell 后端——一个在 Worker 的 V8 isolate 里运行的纯 JavaScript shell,提供 20+ 内置命令:

  • 文件操作catlsmkdirrmcpmvtouchheadtail
  • 文本处理greprgsedawksortwcxargsdiff
  • 搜索find,支持 glob 和正则
  • 自定义命令git(通过 Computer API)、assetsartifacts

所有文件操作在 Cloudflare Computer 的虚拟文件系统(VFS)上运行,不是真实 Linux 文件系统。

两种 shell 后端

后端 模式 工作方式 Plan 要求
DirectShellBackend 直连 just-bash 在 Durable Object 内运行。最简路径——无跨 Worker 通信。 所有 plan(含免费试用)
WorkerShellBackend 隔离 just-bash 在独立 Worker 中运行(通过 Computer Worker Loader 绑定)。Shell 执行与 DO 内存隔离。 需要 LOADER 绑定(Workers Paid)

后端自动选择:有 LOADER 环境绑定时用 WorkerShellBackend,否则用 DirectShellBackend

系统提示词声明

系统提示词明确告知模型 shell 的限制:

"The shell is just-bash, not Linux: native binaries and background processes are unavailable."

Edge 没有改什么

  • 工具注册机制(ctx.tools.register()
  • 工具执行管线(pre-execute、guards、around-dispatch、post-execute)
  • 输出 schema(command、output、exitCode、outputTruncated)

与上游的能力差异

能力 上游 Edge
原生二进制 gitpythonnode ❌ 仅内置命令 + Computer git
后台进程 &nohup ❌ 不支持
管道到外部程序 ✅ `cmd1 cmd2` 任意二进制
环境变量 ✅ 完整 env ⚠️ 有限集合,无持久 export
信号 SIGTERMSIGKILL ⚠️ 基于 AbortController 的取消
文件系统 ✅ 真实 Linux FS ⚠️ VFS——workspace 内持久,无 /usr,workspace 外无 /tmp

性能特征

输出限制:每次执行 65,536 UTF-8 字节。超出部分截断并标记。

超时:默认 120 秒,可通过 DSH_EDGE_DEFAULT_COMMAND_TIMEOUT_MS 配置(最大值也默认 120 秒,可通过 DSH_EDGE_MAX_COMMAND_TIMEOUT_MS 配置)。

执行模型:在 DO isolate 内同步执行(DirectShellBackend)或隔离 Worker(WorkerShellBackend)。每个 turn 内无并发 shell——每条命令执行完毕后才运行下一条。

安全:just-bash 以 executionLimitProfile: 'hardened'defenseInDepth: { enabled: 'auto' } 运行。

架构总结

组件 分类 上游对应
just-bash shell 替换 node:child_process
DirectShellBackend 替换 本地进程 spawning
WorkerShellBackend 替换 隔离子进程
工具注册 复用 ctx.tools.register()

关键观察:Bash 是 Edge 中适配最重的工具。整个执行引擎被替换——从原生进程 spawning 到纯 JS 解释器。尽管如此,面向模型的接口完全相同:相同的工具名、参数和输出格式。模型通过系统提示词声明调整行为。

TODO

**评估 Cloudflare Containers 实现真实 bash。**Cloudflare Containers(2025 年发布)可以在 Workers 旁运行完整 Linux 容器。这将启用原生二进制(gitpythonnode)、真实管道和后台进程——弥合与上游的能力差距。Container 需要挂载 VFS workspace 并将 shell 结果通信回 DO。至少需要 Workers Paid plan。现有的 WorkerShellBackend 接口可能可以扩展为向 Container 而非 Worker Loader 分发。

English

中文

Clone this wiki locally