Skip to content

v0.1.3 - rewrite bash at the spawnSpec choke point

Latest

Choose a tag to compare

@Fishquito7 Fishquito7 released this 24 Sep 06:11
· 2 commits to main since this release

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