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(隔離作用域)來實現這一目標:
- 隔離作用域:在隔離作用域內,重新綁定
ctx.shell爲 Git Bash 執行器。 - 工具複用:上游的
tool-bash代碼保持不變,僅通過不同的綁定實現不同的行爲。 - 互不干擾:宿主作用域綁定 PowerShell,隔離作用域綁定 Git Bash,兩者共存。
限制與注意事項¶
- 僅 Windows 需要:POSIX 平臺 DSH 本身已有 bash 工具,安裝本插件無意義。
- 不經過文件沙箱:命令以 DSH 進程自身權限執行,不會產生沙箱拒絕提示。
- 只讀、不動環境:解析過程只讀註冊表和 PATH,不會修改系統環境變量。
- 依賴是拷貝:
file:協議安裝時,依賴文件是拷貝而非軟鏈,修改代碼需重新安裝。
許可證¶
MIT
插件目錄:dsh-gitbash - SkillHub
源碼地址:Fishquito7/dsh-gitbash - GitHub