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(隔离作用域)来实现这一目标:
- 隔离作用域:在隔离作用域内,重新绑定
ctx.shell为 Git Bash 执行器。 - 工具复用:上游的
tool-bash代码保持不变,仅通过不同的绑定实现不同的行为。 - 互不干扰:宿主作用域绑定 PowerShell,隔离作用域绑定 Git Bash,两者共存。
限制与注意事项¶
- 仅 Windows 需要:POSIX 平台 DSH 本身已有 bash 工具,安装本插件无意义。
- 不经过文件沙箱:命令以 DSH 进程自身权限执行,不会产生沙箱拒绝提示。
- 只读、不动环境:解析过程只读注册表和 PATH,不会修改系统环境变量。
- 依赖是拷贝:
file:协议安装时,依赖文件是拷贝而非软链,修改代码需重新安装。
许可证¶
MIT
插件目录:dsh-gitbash - SkillHub
源码地址:Fishquito7/dsh-gitbash - GitHub