Repository navigation
dsh-rtk v1.3.0 — 多平台支持
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 安装、配置、排障说明。