dsh-gitbash: 給 DSH 在 Windows 上裝一個真正的 bash 工具

DSH 採用“一切皆插件”的理念。在 Windows 上,DSH 默認將 shell 綁定到 PowerShell。如果模型需要運行 bash 命令,必須通過 PowerShell 進行轉義,這會導致複雜的引號和轉義問題。dsh-gitbash 解決了這個問題,它讓 bash 工具在 Windows 上真正可用,無需切換預設或處理轉義地獄。

核心功能

  • 無需新增或切換預設:安裝在 profile 層即可生效,ptc / standard / cordis 等預設無需改動。
  • 直接進入可調用工具列表:工具列表中直接出現 bash 函數定義或 tools.bash(...) 綁定。
  • 無需額外轉義,直調 bash:命令字符串直達 bash -c,只按 bash 的規則解釋一遍,避免了 PowerShell 和 bash 兩層解析。
  • bash 與 PowerShell 由模型自選:兩者並存、互不影響。

安裝與啓用

使用以下命令安裝到默認 profile(web):

dsh plugin --profile web add "github:Fishquito7/dsh-gitbash"

安裝後需要重啓 DSH 才能生效。面板中應顯示 git-bash-executor 與 git-bash-tool 均處於運行中。

使用示例

安裝完成後,模型可以直接調用 bash:

echo "dollar=$HOME"; ls *.ts | head -3
echo "argv0=$0"; uname -s; echo "bash=$BASH_VERSION"

配置

插件支持以下配置項:

  • bashPath:顯式指定 bash.exe 絕對路徑,優先級最高。
  • DSH_GIT_BASH:同上,通過環境變量指定。
  • 其他字段沿用了上游 dsh-bash-local 的配置:cwd、timeoutMs、maxTimeoutMs、maxOutputBytes、maxSpillBytes、graceMs。

如果不配置,插件會按順序查找:bashPath -> DSH_GIT_BASH -> 註冊表 SOFTWARE\GitForWindows -> 默認路徑 -> PATH 中的 bash.exe。

工作原理

DSH 中的 ctx.shell 是一個服務,同一進程內同一服務名只能有一個實現。本插件通過 isolate(隔離作用域)來實現這一目標:

  1. 隔離作用域:在隔離作用域內,重新綁定 ctx.shell 爲 Git Bash 執行器。
  2. 工具複用:上游的 tool-bash 代碼保持不變,僅通過不同的綁定實現不同的行爲。
  3. 互不干擾:宿主作用域綁定 PowerShell,隔離作用域綁定 Git Bash,兩者共存。

限制與注意事項

  • 僅 Windows 需要:POSIX 平臺 DSH 本身已有 bash 工具,安裝本插件無意義。
  • 不經過文件沙箱:命令以 DSH 進程自身權限執行,不會產生沙箱拒絕提示。
  • 只讀、不動環境:解析過程只讀註冊表和 PATH,不會修改系統環境變量。
  • 依賴是拷貝:file: 協議安裝時,依賴文件是拷貝而非軟鏈,修改代碼需重新安裝。

許可證

MIT


插件目錄:dsh-gitbash - SkillHub
源碼地址:Fishquito7/dsh-gitbash - GitHub

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜