Repository navigation
Releases
Releases · Fishquito7/dsh-gitbash
v0.1.3 - rewrite bash at the spawnSpec choke point
v0.1.3 — 修复 dsh 0.1.7-rc.1 之后 bash 工具失效
根因
dsh 0.1.7-rc.1把dsh-bash-local的子类缝从run/start+runArgv/startArgv换成了execute/executeArgv。- 旧版插件只覆盖了旧名字,于是基类的
execute()(写死["bash", "-c", …])被执行;裸bash在 Windows 上命中C:\Windows\System32\bash.exe(WSL 启动器),报WSL2: 找不到指定的路径/HCS/ERROR_PATH_NOT_FOUND(默认发行版的磁盘文件已不存在)。
修复
- 替换点上移到
spawnSpec:无论上游走execute → executeArgv还是run/start → runArgv/startArgv,argv 最后都要经过spawnSpec(spec, argv, …)落成 spawn 配置。只依赖这个收口点,上游再改入口名字也不会退回裸bash。 - 入口方法仍覆盖一层(
execute/run/start)作为第二道保险。 - 首次执行自检:走一遍工具层同款的公开路径(
resolve→execute→result),确认 shell 是 Git Bash 并把身份写进日志;万一上游连收口点都换掉,日志里会出现self-check FAILED,而不是让命令输出一片乱码。 - 只读解析:只读注册表并反推 PATH,不改
PATH、不改注册表、不改 DSH 自身,升级 DSH 后不需要任何重新配置。
升级(重要)
pnpm 不会重新拉取同名依赖,必须先移除再安装:
dsh plugin --profile web remove dsh-git-bash
dsh plugin --profile web add "https://github.com/Fishquito7/dsh-gitbash/releases/latest/download/dsh-git-bash.tgz"然后重启 DSH。
验证
test/harness.mjs(真实 cordis + 真实 dsh-bash-local,22 项全过),其中:
- 直接调用基类
execute(模拟上游入口再次改名)仍然命中 Git Bash:base=/usr/bin/bash、MINGW64_NT-10.0-26200 spawnSpec只替换裸bash,git、绝对路径原样透传,cwd/stdio/graceMs保留- 自检日志:
self-check ok - 行
config.bashPath覆盖仍生效
资产
dsh-git-bash-0.1.3.tgz—— 带版本号,便于归档与校验dsh-git-bash.tgz—— 稳定别名,已更新为 0.1.3;README 里的在线安装命令始终指向它
两者的 sha256 相同:ebe5868bfd7f331dda8da8d6b51ab0bc5dd354cca910f6e115bf936cad1e3286
v0.1.1 - auto-locate Git Bash
v0.1.1 — 自动定位 Git Bash
修复
- 不再假设 Git 装在
C:\Program Files\Git。 Git for Windows 的安装位置因安装方式与用户习惯而异(机器级 / 用户级 / 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)
- 行
- 显式指定的路径会被校验:
bashPath/DSH_GIT_BASH指向不存在的文件时,报出可操作的错误,而不是裸ENOENT崩溃。 - 找不到时不会退到 WSL 的
bash(另一个内核里的 Linux 进程,语义不对),而是列出所有尝试过的路径。 - 挂载时记录实际使用的
bash.exe,便于排查。
升级(重要)
pnpm 不会重新拉取同名依赖,必须先移除再安装:
dsh plugin --profile web remove dsh-git-bash
dsh plugin --profile web add "https://github.com/Fishquito7/dsh-gitbash/releases/latest/download/dsh-git-bash.tgz"然后重启 DSH。
资产
dsh-git-bash-0.1.1.tgz—— 带版本号,便于归档与校验dsh-git-bash.tgz—— 稳定别名,已更新为 0.1.1;README 里的在线安装命令始终指向它
追加修复(同版本内更新)
- 解析结果只在进程内缓存一次,但每次使用前都会复核:如果 Git 被卸载、搬到别处或路径失效,会自动重新走一遍解析链;解析到新位置就继续用,解析不到才报错。
- 报错会指出「之前用的那条路径已经不存在」,并列出这次尝试过的全部候选,而不是裸
ENOENT。
v0.1.0 - dsh-gitbash
v0.1.0 — dsh-gitbash 首个版本
在 Windows 上给 DSH 一个真正的 bash 工具:命令直达 bash -c,不再经过 PowerShell 转义。
亮点
- 无需新增或切换预设:装到 profile 层,
ptc/standard/cordis都不用动,所有会话直接生效 - 直接进入可调用工具列表:native 下多一个
bash函数定义,PTC 下自动多一个tools.bash(...)绑定 - 无额外转义:
$(...)、通配符、单引号字面量、反斜杠全部按 bash 规则解释 - bash 与 pwsh 由模型自选:两者并存、互不影响
- 零依赖:工具与渲染完全复用上游
@deepseek-ai/dsh-tool-bash,进程能力复用dsh-bash-local,本插件只换 argv
安装
dsh plugin --profile web add "https://github.com/Fishquito7/dsh-gitbash/releases/latest/download/dsh-git-bash.tgz"重启 DSH 后生效(新模块根不在热重载范围)。
验证
bash -c 'echo "$0"; uname -s; echo "$BASH_VERSION"'
# /usr/bin/bash · MINGW64_NT-... · 5.3.9(1)-release已知限制
- 不接文件沙箱:Git Bash 是 MSYS2 进程,Windows 受限令牌下不可靠,故以 DSH 进程权限执行
- 依赖上游
dsh-bash-local的 argv 替换缝,DSH 大版本改动该接口时需同步更新 - 仅 Windows 需要(POSIX 上 DSH 自带 bash 工具)
资产说明
dsh-git-bash-0.1.0.tgz—— 带版本号,便于归档与校验dsh-git-bash.tgz—— 稳定别名,README 里的在线安装命令永远指向它