前言¶
在 Windows 上跑 DeepSeek Harness(DSH)时,默认 shell 工具往往走 PowerShell:命令经 pwsh 执行,引号、反斜杠、$env: 变量和代码页行为与 Linux/macOS 上的 bash 不一致。模型按 POSIX 习惯写的一行命令,容易在转义或编码上踩坑。
社区插件 dsh-mingw(目录页 scorpiour/dsh-mingw)把 Windows 上新会话里的 shell 工具换成 Git for Windows 自带的 MinGW64 bash,命令通过 bash -c 执行,语义与沙箱机制仍沿用 DSH 的 @deepseek-ai/dsh-bash-sandbox。下面介绍它的定位、安装方式和注意点。
这是什么¶
- 维护者:Scorpiour
- 分类:客户端(社区插件目录)
- 一句话:在 Windows 上让 DSH 的 shell 工具使用 Git Bash(MinGW64),而不是 PowerShell。
- 包名:
@local/dsh-win-mingw(当前发布版本0.1.1,MIT 许可证)
Git for Windows 已内嵌 MinGW64 用户态(bash、coreutils、git 等),插件默认使用 C:\Program Files\Git\bin\bash.exe,并把该目录置于子进程 PATH 最前。不需要单独安装 MinGW、MSYS2,也不必把 bash 加入系统 PATH。
核心功能¶
Shell 行为¶
装好后,新建会话里模型看到的是 bash 工具,而不是 pwsh。与 PowerShell 路径相比,README 中强调的差异包括:
- 引号、反斜杠、
$、反引号、换行按 POSIX/bash 规则解析; - stdout / stderr / 重定向文件为 UTF-8 字节;
- 托管变量包括
$DSH_HOME、$DSH_PROFILE、$DSH_PROFILE_DIR、$DSH_SESSION_ID、$DSH_SHELL; - 每次调用仍是新进程;工作目录、超时、后台 job、输出截断和沙箱行为继承 DSH 既有 bash 沙箱机制。
uname -s 会显示 MINGW64_NT-...,uname -o 为 Msys,对应 Git for Windows 内嵌环境。
与宿主 PowerShell 的关系¶
安装通过 cordis.patch.yml 改写 standard、ptc、cordis 三个 preset 的 shell 挂载方式:在 Windows 上用隔离的 group 挂载 MingwBashExecutor 与 bash 工具,不替换宿主由 @deepseek-ai/dsh-pwsh-sandbox 提供的 PowerShell executor。minimal preset(持久 pwsh)未改动;已有会话不会热切换,需新建会话才走 MinGW bash。
Bash 自动探测¶
探测顺序(资料原文):常见 Git 安装目录 → git --exec-path 反推 Git 根目录 → PATH 中的 bash.exe(会跳过 C:\Windows\System32\bash.exe,并用 uname 确认是 MinGW/MSYS)。便携版 Git、scoop、非标准目录可通过 git --exec-path 或环境变量 MINGW_BASH 指定。
安装前提¶
- Windows 操作系统。
- 已安装 Git for Windows(默认路径
C:\Program Files\Git)。 - DSH
0.2.1-rc.2系列(engines.dsh限定为>=0.2.1-rc.2 <0.3.0)。
插件以当前 DSH 进程权限运行;安装前建议在 GitHub 仓库阅读源码与 LICENSE,确认符合你的环境策略。
安装与启用¶
从 GitHub 安装(推荐)¶
在 DSH 插件管理器中:
plugin_manager action=install_bundle target=github:Scorpiour/dsh-mingw
或从 CLI:
dsh plugin --profile web add github:Scorpiour/dsh-mingw
需要固定发布版本时指定 tag:
dsh plugin --profile web add github:Scorpiour/dsh-mingw#v0.1.1
从本地目录安装(开发)¶
插件管理器:
plugin_manager action=install_bundle target=<克隆目录>
CLI:
dsh plugin --profile web add <克隆目录>
经过上面的步骤,现有会话保持原样;只有新建会话才会使用 MinGW bash。若安装后出现 preset 模块导入失败(UI 显示 never start),README 建议重启 DSH 一次(不必重装),再新建会话。
验证¶
新建会话后,让模型或自己在 shell 工具中运行:
uname -o; pwd; printf '中文\n'; echo "$DSH_PROFILE"
command -v pwsh || echo no-pwsh
command -v bash
期望结果(与 README 一致):
uname -o输出Msys(不是GNU/Linux);pwd为当前目录的 POSIX 形式(例如/e/Develop/dsh-win-mingw);中文正常输出;DSH_PROFILE为当前 profile;pwsh不存在(或no-pwsh);bash解析到 Git/MSYS 路径。
配置¶
执行器配置在 cordis.patch.yml 的 mingw-shell 下,可用字段:
| 字段 | 默认 | 含义 |
|---|---|---|
bashPath |
自动探测 | 显式指定 bash.exe,或包含 bash.exe 的目录 |
verifyBash |
true |
是否用 uname 验证选中 shell 为 MinGW/MSYS |
pathPrepend |
[] |
追加到子进程 PATH 的 Windows 目录(位于 bash 目录之后) |
优先级:bashPath > 环境变量 MINGW_BASH > 常见 Git/MSYS2 安装位置 > git --exec-path 反推 > PATH。显式指定的 bash 不可用时会直接报错,不会静默换用其他解释器。
Git 装在非标准位置时,可在 PowerShell 中设置(改环境变量无需重装 bundle):
$env:MINGW_BASH = 'D:\PortableGit\bin\bash.exe'
适用场景与注意¶
适合谁
- 主要在 Windows 上使用 DSH,希望模型执行的 shell 与 Unix 习惯一致(管道、重定向、UTF-8 文本)。
- 已安装 Git for Windows,不想为 DSH 单独维护 MSYS2 或全局
bashPATH。
限制与排错(摘自 README)
workspace-write沙箱与 MinGW/Git/tmp、Windows ACL 的组合尚未端到端验证;默认 profile 为danger-full-access,若切换workspace-write后临时文件写入失败,可先切回或向维护者反馈。- 命令里显式调用
powershell/cmd /c仍由它们执行。 minimalpreset 仍为持久 pwsh。- 依赖
@deepseek-ai/dsh-bash-sandbox等当前 API;DSH 大版本升级后宜先跑仓库内测试与node scripts/build-patch.mjs,再更新插件。
DSH 生态强调「一切皆插件」;SkillHub 插件目录 为社区站点,与 DeepSeek / 幻方无官方从属关系。
结尾¶
dsh-mingw 把 Windows 上新会话的 DSH shell 工具接到 Git for Windows 自带的 MinGW64 bash,在保留 bash 沙箱语义的前提下避开 PowerShell 的 cmdlet 与转义差异。安装命令以仓库 README 为准;固定版本可使用 #v0.1.1 tag。