Skip to content

dsh-rtk v1.3.0 — 多平台支持

Choose a tag to compare

@robbin810130 robbin810130 released this 04 Oct 15:24
· 4 commits to main since this release

dsh-rtk v1.3.0 — 多平台

问题:插件此前只适配 macOS/Linux。最致命的一条是 Windows 上完全不触发——DSH 在 dsh-base 里按平台开关 shell 工具(tool-bash 在 win32 被禁用,Windows 用的是 tool-pwsh),而插件只匹配 exec.name === 'bash',在 Windows 上没有任何触发机会。此外 POSIX 单引号转义、POSIX 权限位校验、POSIX 候选路径在 Windows 上均不成立(其中 world-writable 判定会把每一个 Windows 可执行文件都拒掉)。

  • 按方言匹配工具:bash/sh/dash/zsh/ksh → POSIX,pwsh/powershell → PowerShell,并容忍 bash-persistent、tool:pwsh 这类前后缀变体;非 shell 工具(fs、read…)永不改写。
  • 按 shell 引用二进制路径:POSIX 用 '…'(内部单引号转义为 '\''),PowerShell 用 '…'(内部单引号双写为 '')。
  • 按 shell 识别单条命令跳过语法:DSH_RTK_DISABLE=1 <cmd> 与 $env:DSH_RTK_DISABLE='1'; <cmd>。
  • 平台化候选路径:Windows 新增 %USERPROFILE%\.cargo\bin\rtk.exe、%LOCALAPPDATA%\Microsoft\WinGet\Links\rtk.exe、%USERPROFILE%\scoop\shims\rtk.exe、%ProgramData%\chocolatey\bin\rtk.exe、%ProgramFiles%\rtk\rtk.exe;支持 %VAR% 展开(含大小写不敏感的备用映射)。
  • 平台化可信校验:Windows 只接受 .exe/.com(.cmd/.bat 需要经 shell 转发命令文本,存在注入风险,直接拒绝),不再套用 POSIX 权限位;POSIX 规则保持不变。
  • 环境变量大小写不敏感读取:Windows 常见 ProgramFiles 与 PROGRAMFILES 混用;RTK_BIN、DSH_RTK_DISABLE、DSH_HOME 都走同一套查找。
  • 可测性重构:createRtkRuntime 支持注入 spawn,钩子拆出为 createToolHook,测试不再依赖 #!/bin/sh 假二进制,三平台都能完整运行。
  • doctor 跨平台:Windows 用 Win32_Process 列宿主进程、tasklist 判断存活;状态文件改为「pid 必须存活或与宿主匹配」才算生效证据;输出当前平台实际加载的 shell 工具名。
  • 新增 CI:.github/workflows/ci.yml 在 ubuntu / macos / windows × Node 22/24 上跑 npm test。
  • README 增加平台矩阵与 Windows 安装、配置、排障说明。