在 Windows 上直接调用 bash,免去 PowerShell 转义
29.7/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/9/26 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add Fishquito7/dsh-gitbash该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · dev
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 38 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件
查看扫描证据(共 2 处,展示前 2 条)
- 执行外部命令固定命令lib/index.js:55
const out = execFileSync('reg.exe', ['query', hive + '\\SOFTWARE\\GitForWindows', '/v', 'InstallPath'], { - 读取本地文件lib/index.js:112
const stat = lstatSync(path);
扫描于 2026/10/31(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 直接调用bash
给 DSH 在 Windows 上配个真正的 bash 工具:直接调 bash,不用 pwsh 转义,也没有引号地狱。
README
由 DeepSeek 最新模型翻译生成dsh-gitbash
给 DSH 在 Windows 上装一个真正的 bash 工具:调用 bash 不用再经过 pwsh 转义,告别转义地狱。
English · 中文
这个插件解决什么
DSH 在 Windows 上把 shell 写死了只能用 PowerShell。 工具列表里根本没有 bash 这个工具,于是模型想跑一段 bash,只能绕道:
真实写照:命令必须穿过 PowerShell 和 bash 两层解析 & "C:\Program Files\Git\bin\bash.exe" -lc "echo \"dollar=\$HOME\" ; ls .ts | head -3"
引号、反斜杠、$、单引号在两套规则里含义不同,写对一次全靠运气。装本插件之后,同样的命令长这样:
echo "dollar=$HOME"; ls .ts | head -3
命令字符串直达 bash -c,只按 bash 的规则解释一遍。
四个优势
| # | 优势 | 说明 |
| 1 | 无需新增或切换预设 | 装到 profile 一层即可,ptc / standard / cordis 等预设都不用动,所有会话直接生效。
展开完整文档(README 剩余 1 节)
dsh-gitbash 给 DSH 在 Windows 上装一个真正的 bash 工具:调用 bash 不用再经过 pwsh 转义,告别转义地狱。 English · 中文 这个插件解决什么 DSH 在 Windows 上把 shell 写死了只能用 PowerShell。 工具列表里根本没有 bash 这个工具,于是模型想跑一段 bash,只能绕道: 真实写照:命令必须穿过 PowerShell 和 bash 两层解析 & "C:\Program Files\Git\bin\bash.exe" -lc "echo \"dollar=\$HOME\" ; ls .ts | head -3" 引号、反斜杠、$、单引号在两套规则里含义不同,写对一次全靠运气。装本插件之后,同样的命令长这样: echo "dollar=$HOME"; ls .ts | head -3 命令字符串直达 bash -c,只按 bash 的规则解释一遍。 四个优势 | # | 优势 | 说明 | | 1 | 无需新增或切换预设 | 装到 profile 一层即可,ptc / standard / cordis 等预设都不用动,所有会话直接生效。 | | 2 | 直接进入可调用工具列表 | native 呈现下多出一个 bash 函数定义;PTC 呈现下自动多出一个 tools.bash(...) 绑定。不需要写任何包装工具。 | | 3 | 无需额外转义,直调 bash | 不再需要 pwsh -Command 套一层,少一层解析就少一类事故:$(...)、通配符、单引号字面量、反斜杠全部按 bash 规则工作。 | | 4 | bash 与 PowerShell 由模型自选 | 两者并存、互不影响:跑命令、管道、grep/sed/find/脚本走 bash;注册表、服务、进程句柄、Windows 原生路径继续走 pwsh。 | 装上前后对比 | | 装之前 | 装之后 | | 工具目录 | 只有 pwsh(bash 被平台开关关掉了) | pwsh + bash | | 跑 bash 的路径 | pwsh → bash(两层解析) | bash(一层) | | 需要改预设吗 | —— | 不需要,profile 层装一次即可 | | pwsh 是否受影响 | —— | 完全不受影响,照旧可用 | 安装 --profile 后面换成你实际使用的 profile 名(Web 界面默认是 web)。 方式一:GitHub Release tarball dsh plugin --profile web add "https://github.com/Fishquito7/dsh-gitbash/releases/latest/download/dsh-git-bash.tgz" releases/latest/download/ 永远指向最新一版。要锁版本就换成带 tag 的地址,例如: https://github.com/Fishquito7/dsh-gitbash/releases/download/v0.1.0/dsh-git-bash-0.1.0.tgz 备选:直接从 GitHub 仓库安装 dsh plugin --profile web add "github:Fishquito7/dsh-gitbash" 这条路会直接走 pnpm 的依赖流程,部分环境会因为构建脚本策略被拒(pnpm 报 ignored build scripts 之类)。装不上就回到方式一。 方式二:本地安装 已经手动下载了 tarball,或者要装本地源码目录: 本地 tarball dsh plugin --profile web add "file:C:/path/to/dsh-git-bash-0.1.0.tgz" 本地源码目录(边改边试) dsh plugin --profile web add "file:C:/path/to/dsh-gitbash" 然后重启 DSH 新装的 bundle 属于"新模块根",不在热重载范围,必须重启 host 才会出现 bash 工具。 验证 重启后看一眼插件面板:git-bash-executor 与 git-bash-tool 都应为"运行中"。再让模型跑一下: echo "argv0=$0"; uname -s; echo "bash=$BASH_VERSION" 期望:/usr/bin/bash、MINGW64_NT-...、bash 5.x 升级 pnpm 不会自动重新拉取同名依赖,所以升级要先移除再安装: dsh plugin --profile web remove dsh-git-bashpowershell dsh plugin --profile web add "https://github.com/Fishquito7/dsh-gitbash/releases/latest/download/dsh-git-bash.tgz" 然后重启 DSH。想锁版本就把 URL 换成带 tag 的形式。 卸载与回滚 powershell dsh plugin --profile web remove dsh-git-bash 然后重启 DSH 面板里出现异常时,也可以只关掉 git-bash-executor / git-bash-tool 两个开关再重启 —— 工具与执行器是分离的。 配置 | 项 | 说明 | | bashPath(行 config) | 显式指定 bash.exe 绝对路径,优先级最高 | | DSH_GIT_BASH | 同上,走环境变量 | | 行 config | 沿用上游 dsh-bash-local 的全部字段:cwd、timeoutMs、maxTimeoutMs、maxOutputBytes、maxSpillBytes、graceMs | 不配置也能用。 Git 的安装位置与安装习惯因人而异(机器级 / 用户级 / scoop / chocolatey),所以插件自己按顺序找: 行 config 的 bashPath → 环境变量 DSH_GIT_BASH → 注册表 HKLM / HKCU 下 SOFTWARE\GitForWindows 的 InstallPath → %ProgramFiles%\Git\bin → %ProgramFiles(x86)% → %ProgramW6432% → %LOCALAPPDATA%\Programs\Git\bin(用户级安装)→ scoop → chocolatey → PATH 里各项的 bash.exe,以及 git.exe 同级的 ..\bin\bash.exe。 最后一条很关键:Git 安装器默认只把 Git\cmd 放进 PATH,从不放 Git\bin —— 这正是裸 bash 在 Windows 上找不到的原因。 全部落空时不会退到 WSL 的 bash(那是另一个内核里的 Linux 进程,语义不对),而是报一条列出所有尝试路径的错误。 原理 工具只负责“暴露能力”,真正执行命令的是 ctx.shell 这个服务;而一个进程里 ctx.shell 只能绑一个实现,所以我们用一个 isolate 隔离作用域来放第二份绑定。 拆开看是三件事: ① 工具只暴露,不执行。 工具(tool)本质是一张“说明书”:叫什么名字、有哪些参数、怎么渲染结果。它内部只会写一句 ctx.shell.run(...),把命令交出去。它完全不知道底下是 bash 还是 PowerShell。 ② 真正干活的是 ctx.shell,而它被绑死了。 DSH 里的 shell 是一个服务。Windows 上它被绑死到 PowerShell 执行器,同时 bash 工具被平台开关关掉 —— 所以你看到的工具列表里只有 pwsh。 而且一个 DSH 进程里,同一个服务名只允许一个实现,硬挂第二个会直接报错。这就是“不能简单再加一个 bash”的原因。 ③ 我们的做法:用一个 isolate 隔离作用域,做第二份绑定。 isolate 是组合里声明隔离作用域的写法(直观理解就是「一个小盒子」):在隔离作用域内,shell 这个名字重新绑到另一个实现 —— 名字没变,只是绑的键不同;隔离作用域之外完全不受影响。 隔离作用域里我们放两样东西: 1. 一个“把命令交给 Git Bash 执行”的执行器 —— 本插件新增,核心约 30 行; 2. 上游原版的 bash 工具 —— 零改动。它照旧只写 ctx.shell.run(...),只不过在隔离作用域里,这句话落到了 Git Bash 上。 text 宿主(原样不动) tool-pwsh ──► ctx.shell(宿主作用域) = PowerShell 执行器 isolate 隔离作用域 tool-bash ──► ctx.shell(隔离作用域) = Git Bash 执行器 ← 本插件新增 ↑ 上游代码零改动 ↑ 同一个服务名,两份不同的 isolate 绑定 结果就是两个工具、两份绑定、互不干扰:原版 tool-pwsh 指向宿主的 ctx.shell(PowerShell 执行器),我们新增的 tool-bash 指向隔离作用域里的 ctx.shell(Git Bash 执行器)—— 同一份工具代码,绑在不同的 isolate 上,就得到两个不同的 shell。 为什么不干脆重写一个 bash 工具? 因为上游那个工具的逻辑很厚:参数校验、超时、输出截断与落盘、后台任务与作业接线、[stderr] 与 [exit code: N] 渲染。而它本来就是“只认 ctx.shell、不认具体 shell”的设计 —— 换掉它脚下的服务,它就自动变成 bash 工具。少写几百行,也永远不会和上游漂移。 边界与已知限制 - 不经过文件沙箱:命令以 DSH 进程自身的权限执行,不会产生 [sandbox: file access denied] 之类的提示。原因很实际 —— Git Bash 是 MSYS2 进程,在 Windows 受限令牌下需要 fork、管道与私有临时目录,行为不可靠,因此有意不接沙箱。 - 只跟一个收口点,不跟上游的入口命名:上游 dsh-bash-local 的子类入口改过名(run/start + runArgv/startArgv → execute/executeArgv),但每条执行路径最终都要经过 spawnSpec(spec, argv, …) 把 argv 落成 spawn 配置。本插件就在这个收口点把裸 bash 换成解析出来的 Git Bash,所以入口再改名也不会退回裸 bash;命名过的入口照旧覆盖一层,作为第二道保险。首次执行时还会走一遍公开路径(resolve → execute → result)自检并把 shell 身份写进日志 —— 万一上游连收口点都换掉,日志里会直接出现 self-check FAILED,而不是让命令输出一片乱码。 - 只读、不动环境:解析全程只读注册表并反推 PATH;不改 PATH、不改注册表、不改 DSH 自身,升级 DSH 后不需要任何额外配置。 - file: 依赖是拷贝,不是软链:改完代码后要 remove → add → 重启才会生效。 - 仅 Windows 需要:POSIX 平台上 DSH 本来就有 bash 工具,装这个插件没有意义。 常见问题 Q:面板里的执行器和工具两行,需要都开着吗? 需要。执行器提供 shell 服务,工具消费它。只关执行器的话,bash 工具会因为等不到服务而消失(不是报错,而是 pending)。 Q:装完工具没出现? 按顺序检查:① 是否重启过 DSH;② 两行是否都在运行中;③ dsh --profile web --dump-config 是否能正常输出组合(退出码 0)。 Q:会顶掉 pwsh 吗? 不会。隔离作用域只影响 shell 这一个名字,且只在隔离作用域内生效。实测两者可以同时使用。 Q:为什么默认用 Git Bash,而不是 WSL 的 bash? 因为 Git Bash 是原生 Windows 进程,而 WSL 的 bash 是另一个内核里的 Linux 进程。对「在 Windows 工作区里跑命令」这件事,前者才是对的工具: | | Git Bash(本插件) | WSL bash | | 进程形态 | 原生 Windows 进程(MSYS2 运行时) | Linux 进程,跑在 WSL 的 Linux 内核上 | | 工作区路径 | C:\...\proj ↔ /c/.../proj,同一个目录 | 要写成 /mnt/c/...,$HOME 是 Linux 家目录 | | 与 DSH 文件工具(read/edit/glob) | 操作同一批文件,路径模型一致 | 路径模型分裂,模型要自己翻译路径 | | 文件 I/O | 原生 NTFS | /mnt/c 走转发,小文件密集操作明显更慢 | | 真 Linux 工具链 | ✗ 无 fork / apt / systemd,MSYS 还会改写形似路径的参数 | ✅ 完整 | 顺带这也解释了上游为什么直接在 win32 上禁用 dsh-bash-local:裸 bash 在 Windows 上语义并不明确 —— 可能是 WSL 启动器,也可能根本不存在。 Q:Git 没装在 C 盘,或者装在别的位置,会找不到吗? 不会。解析链的第一条与安装位置无关:Git for Windows 会把自己登记进注册表 HKLM\SOFTWARE\GitForWindows(用户级安装是 HKCU)的 InstallPath。完整顺序见上面「配置」一节。真的一个都找不到时,报错会逐条列出尝试过的路径,并告诉你怎么用 bashPath 或 DSH_GIT_BASH 显式指定。 Q:想换成别的 bash 怎么办? 设置环境变量 DSH_GIT_BASH 指向任意 bash 可执行文件即可。 开发 text dsh-gitbash/ # 仓库名;包名仍是 dsh-git-bash ├─ cordis.patch.yml # 组合补丁:隔离作用域 + 两行声明 ├─ lib/index.js # 执行器插件(核心约 30 行) ├─ test/harness.mjs # 离线验证脚本(真实 cordis 驱动,无需启动 DSH) ├─ package.json # 零依赖 └─ README.md 离线验证(本包需先位于某个 profile 的解析链上,例如已安装到 $DSH_HOME/profiles/web/node_modules/): bash node test/harness.mjs 脚本会检查:宿主 shell 未被顶替、隔离作用域内解析到本执行器、设置段零重复注册、真实 Git Bash 身份、通配符与 $(...) 展开、退出码透传、stderr 分离、spawnSpec 收口点仍把裸 bash 换成 Git Bash(即上游入口改名后走的路径)、以及首次执行的自检结论。 打包: bash npm pack # 产出 dsh-git-bash-0.1.0.tgz 许可 MIT
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
Fishquito7/dsh-gitbash
在 Windows 上直接调用 bash,免去 PowerShell 转义
相关插件 · 开发 / 工程
隐私简历生成器reactive-resume/reactive-resume
Reactive Resume 已迁至 GitHub 上的…
★ 45,125已汉化MCP
71.7
AI 架构文档生成器sopaco/deepwiki-rs
🚀 Litho 已进化为 Terrain —— 给你的 AI 智能体一张会呼吸的代码库地图。
★ 3,157已汉化DSH
70.8
长时任务执行闭环AMAP-ML/LongHorizon-Harness
面向 Computer-Use Agent 的 Loop Engineering
★ 1,764已汉化DSH
70.5
AI 编程纪律方法包GanyuanRan/Aegis
让 AI 编程 agent 变得可信:少返工、更安全、说“完成”前先给证据。
★ 1,384已汉化DSH
69.6
多代理编排运行时Enderfga/claw-orchestrator
面向编程智能体的运行时。把 Claude Code、Codex、Antigravity、Grok…
★ 586已汉化MCP
69.4
记忆进化插件csyangwen/dsh-memory-evolve
dsh-memory-evolve 使用场景指南
★ 461已汉化DSH
67.9