摘要
dsh-gitbash-shell@0.12.0 在 Windows 上存在一个问题:在 workspace-write 沙箱模式下,所有 bash 工具调用都会**"假成功"——调用返回 completed 且 exit code: 0,但没有 stdout、没有 stderr、也没有任何文件系统副作用**,命令实际上从未执行。而在 danger-full-access 模式下,同一个执行器工作完全正常。
环境
- DSH Desktop 2.0.5 / dsh core 0.1.2-rc.1(Windows)
dsh-gitbash-shell 0.12.0(安装在 desktop profile 的 bundles 中)- Git for Windows 位于
D:\Git(非系统盘),bash 版本 5.2.37(1)-release - 会话 preset:
standard-gitbash(tool-bash 启用、tool-pwsh 禁用) - 沙箱:Windows ACL restricted-token runner(
dsh-sandbox-windows-acl)
复现步骤
会话为「标准模式 · Git Bash」。通过 bash 工具执行任意命令,例如 echo $BASH_VERSION 或 echo hi > probe.txt:
- workspace-write 模式:返回为空(连
(no output) 都没有),没有 [exit code] 标记,probe.txt 从未生成。后台模式:job 报告 started 后 completed, exit code: 0——但文件副作用依然从未发生。 - danger-full-access 模式(同一会话,
sandbox_permissions: danger-full-access):完全正常——stdout 输出 5.2.37(1)-release,stderr 正常回流,exit code 正常,文件写入成功。
已做过的对照实验(已排除项)
尝试 | 结果
-- | --
icacls "D:\Git" /grant Everyone:(OI)(CI)RX /T(授权 D 盘 Git 目录) | 无改善(workspace-write 下仍然假成功)
bashPath 改为 D:/Git/usr/bin/bash.exe(真正的 MSYS bash,而非 bin 目录的 wrapper) | workspace-write 下无改善
重新启用官方 PowerShell 执行器(pwsh-sandbox + standard preset 对照组) | workspace-write 下完全正常
在 DSH 之外独立运行 Git Bash | 正常
疑似根因
GitBashSandboxExecutor 通过 Windows ACL runner 将命令包装为 [bash.exe, -c, cmd] 执行。在 restricted token 下,MSYS bash 进程似乎无法正常启动/初始化(怀疑与 msys-2.0.dll 有关),但该失败被吞掉,并以成功的空结果(exit 0、无输出)呈现,而不是 runner 错误(windows-acl-run: ...、exit 127)或 spawn 错误。full-access 分支(直接 spawn、无 restricted token)工作正常,说明问题出在 restricted token 与 MSYS 的交互上,而非执行器接线或 bash 路径配置。
期望行为
- workspace-write 下的 bash 调用要么正常执行并返回输出,要么明确失败(SandboxUnavailableError / denial 标记 /
[exit code]),绝不应静默假成功。
摘要
dsh-gitbash-shell@0.12.0在 Windows 上存在一个问题:在 workspace-write 沙箱模式下,所有 bash 工具调用都会**"假成功"——调用返回 completed 且exit code: 0,但没有 stdout、没有 stderr、也没有任何文件系统副作用**,命令实际上从未执行。而在 danger-full-access 模式下,同一个执行器工作完全正常。环境
dsh-gitbash-shell0.12.0(安装在 desktop profile 的 bundles 中)D:\Git(非系统盘),bash 版本 5.2.37(1)-releasestandard-gitbash(tool-bash 启用、tool-pwsh 禁用)dsh-sandbox-windows-acl)复现步骤
会话为「标准模式 · Git Bash」。通过 bash 工具执行任意命令,例如
echo $BASH_VERSION或echo hi > probe.txt:(no output)都没有),没有[exit code]标记,probe.txt从未生成。后台模式:job 报告started后completed, exit code: 0——但文件副作用依然从未发生。sandbox_permissions: danger-full-access):完全正常——stdout 输出5.2.37(1)-release,stderr 正常回流,exit code 正常,文件写入成功。已做过的对照实验(已排除项)
疑似根因
GitBashSandboxExecutor通过 Windows ACL runner 将命令包装为[bash.exe, -c, cmd]执行。在 restricted token 下,MSYS bash 进程似乎无法正常启动/初始化(怀疑与 msys-2.0.dll 有关),但该失败被吞掉,并以成功的空结果(exit 0、无输出)呈现,而不是 runner 错误(windows-acl-run: ...、exit 127)或 spawn 错误。full-access 分支(直接 spawn、无 restricted token)工作正常,说明问题出在 restricted token 与 MSYS 的交互上,而非执行器接线或 bash 路径配置。期望行为
[exit code]),绝不应静默假成功。