dsh-gitbash: 给 DSH 在 Windows 上装一个真正的 bash 工具

DSH 采用“一切皆插件”的理念。在 Windows 上,DSH 默认将 shell 绑定到 PowerShell。如果模型需要运行 bash 命令,必须通过 PowerShell 进行转义,这会导致复杂的引号和转义问题。dsh-gitbash 解决了这个问题,它让 bash 工具在 Windows 上真正可用,无需切换预设或处理转义地狱。

核心功能

  • 无需新增或切换预设:安装在 profile 层即可生效,ptc / standard / cordis 等预设无需改动。
  • 直接进入可调用工具列表:工具列表中直接出现 bash 函数定义或 tools.bash(...) 绑定。
  • 无需额外转义,直调 bash:命令字符串直达 bash -c,只按 bash 的规则解释一遍,避免了 PowerShell 和 bash 两层解析。
  • bash 与 PowerShell 由模型自选:两者并存、互不影响。

安装与启用

使用以下命令安装到默认 profile(web):

dsh plugin --profile web add "github:Fishquito7/dsh-gitbash"

安装后需要重启 DSH 才能生效。面板中应显示 git-bash-executor 与 git-bash-tool 均处于运行中。

使用示例

安装完成后,模型可以直接调用 bash:

echo "dollar=$HOME"; ls *.ts | head -3
echo "argv0=$0"; uname -s; echo "bash=$BASH_VERSION"

配置

插件支持以下配置项:

  • bashPath:显式指定 bash.exe 绝对路径,优先级最高。
  • DSH_GIT_BASH:同上,通过环境变量指定。
  • 其他字段沿用了上游 dsh-bash-local 的配置:cwd、timeoutMs、maxTimeoutMs、maxOutputBytes、maxSpillBytes、graceMs。

如果不配置,插件会按顺序查找:bashPath -> DSH_GIT_BASH -> 注册表 SOFTWARE\GitForWindows -> 默认路径 -> PATH 中的 bash.exe。

工作原理

DSH 中的 ctx.shell 是一个服务,同一进程内同一服务名只能有一个实现。本插件通过 isolate(隔离作用域)来实现这一目标:

  1. 隔离作用域:在隔离作用域内,重新绑定 ctx.shell 为 Git Bash 执行器。
  2. 工具复用:上游的 tool-bash 代码保持不变,仅通过不同的绑定实现不同的行为。
  3. 互不干扰:宿主作用域绑定 PowerShell,隔离作用域绑定 Git Bash,两者共存。

限制与注意事项

  • 仅 Windows 需要:POSIX 平台 DSH 本身已有 bash 工具,安装本插件无意义。
  • 不经过文件沙箱:命令以 DSH 进程自身权限执行,不会产生沙箱拒绝提示。
  • 只读、不动环境:解析过程只读注册表和 PATH,不会修改系统环境变量。
  • 依赖是拷贝:file: 协议安装时,依赖文件是拷贝而非软链,修改代码需重新安装。

许可证

MIT


插件目录:dsh-gitbash - SkillHub
源码地址:Fishquito7/dsh-gitbash - GitHub

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜