Repository navigation
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