dsh-workspace-env:從 workspace .env 注入 DSH pwsh 子進程環境變量

前言

在 DSH 智能體工作流裏,pwsh 工具調用經常需要讀取 token、路徑、本地工具環境變量。如果每次都在系統層手工導出,容易出現兩個問題:項目之間串環境,切到另一個 workspace 後還帶着上一個項目的變量;或者改完 .env 後還要重啓進程才能生效。

dsh-workspace-env 解決的就是這類問題:它作爲 DSH 插件增強 pwsh executor,在每次調用時從當前 workspace 目錄讀取 .env,並把其中的變量注入子進程環境。下面介紹它的定位、能力、安裝方式和驗證方法。

這是什麼

dsh-workspace-env 是一個 DSH 插件,倉庫位於 Momojie-S/dsh-workspace-env,許可證爲 MIT。

它的一句話定位是:

DSH 插件:pwsh executor 增強,從 workspace .env 注入環境變量到子進程。

這個插件作爲 dsh.bundle 組合包安裝,使用 dsh plugin 安裝進 profile 後,會自動追加配置層。安裝後不需要手工編輯 patch,也不提供額外配置項。

核心能力

下面列出已覈實的幾項行爲。

  1. 按 workspace 隔離
    pwsh 工具每次調用時,自動把當前 workspace 目錄下的 .env 注入子進程環境變量。切項目時自動切換 env,agent 無感知。

  2. 每次調用現讀
    .env 每次命令調用時現讀,改完立即生效,無需重啓 DSH。

  3. 忽略 DSH 管理變量
    DSH_* 前綴的 key 一律忽略。原因是 DSH 管理變量有自己的通道,workspace .env 不覆蓋這些 key。

  4. 同 key 覆蓋規則
    同 key 覆蓋時,workspace .env 優先級最高,贏過系統環境變量和 DSH 注入的同名變量;DSH_* 除外。

  5. 支持變量引用
    支持 ${VAR} 引用父環境和同文件中更早定義的變量。未定義變量展開爲空串。
    覆蓋是整體替換,如果要追加,需要使用引用,例如:

   PATH=D:\tools;${PATH}
  1. 基礎解析規則
    支持成對單引號、雙引號自動去除,支持 # 註釋,空行和無 = 的行會被跳過。

環境與限制

使用前需要確認環境:

  • DSH 版本要求:DSH >= 0.1.0-rc.6
  • 已驗證至:0.1.1-rc.2
  • 僅覆蓋 Windows pwsh
  • bash 鏈路未覆蓋
  • 依賴 shell 服務的 spawnSpec 內部方法
  • 升級 DSH 後建議重跑驗證

安裝與啓用

1、安裝插件

官方安裝命令如下:

dsh plugin --profile web add github:Momojie-S/dsh-workspace-env

如果你使用 pnpm >= 10,首次 add 會提示授權構建。需要按提示把包鍵寫入:

~/.dsh/profiles/web/pnpm-workspace.yaml

的 allowBuilds 中,然後重新執行 add。

也可以使用 tarball 安裝:

dsh plugin --profile web add momojie-s-dsh-workspace-env-0.1.0.tgz

2、驗證配置層

安裝後執行:

dsh web --dump-config | Select-String workspace-env

應看到:

# == dsh-workspace-env

看到這一層,說明插件配置層已就位。

3、重啓 DSH

驗證層就位後,需要重啓 DSH。

典型用法

1、在 workspace 根目錄放 .env

在 workspace 根目錄,也就是 session cwd,放一個 .env 文件:

GH_TOKEN=gho_xxx
QUOTED="value with spaces"
PATH=D:\mytools;${PATH}

其中:

  • GH_TOKEN=gho_xxx:注入普通環境變量。
  • QUOTED="value with spaces":成對雙引號會被自動去除。
  • PATH=D:\mytools;${PATH}:通過 ${PATH} 引用父環境,實現 PATH 前置追加。

2、驗證注入是否生效

在 workspace 的 .env 中寫入:

WS_ENV_TEST=hello

讓 agent 執行:

pwsh: echo $env:WS_ENV_TEST

如果輸出:

hello

說明注入生效。

3、驗證 workspace 隔離

切換到沒有 .env 的目錄,執行同一條命令:

pwsh: echo $env:WS_ENV_TEST

如果輸出爲空,說明 workspace 級隔離生效。

適用場景與注意

這個插件適合以下情況:

  • 你使用 DSH 的 Windows pwsh 鏈路。
  • 不同項目需要不同的環境變量。
  • 希望環境變量跟隨 workspace 切換,而不是手動維護系統環境。
  • 修改 .env 後希望立即生效,不希望每次重啓 DSH。

需要注意:

  • 插件以當前 dsh 進程權限運行,安裝前應檢查源碼與許可證。
  • 本插件許可證爲 MIT。
  • DSH_* 前綴的 key 不會由 workspace .env 覆蓋。
  • ${VAR} 未定義時展開爲空串。
  • 覆蓋是整體替換,追加請使用 ${VAR} 引用。
  • 僅覆蓋 Windows pwsh,bash 鏈路未覆蓋。
  • 升級 DSH 後建議重跑驗證。

結尾

dsh-workspace-env 的價值在於把環境變量管理下沉到 workspace:同一個 DSH profile 下,不同項目目錄可以各自攜帶自己的 .env,pwsh 子進程每次調用時現讀現注入。它適合需要按項目隔離環境變量的 DSH 使用場景。

GitHub:

https://github.com/Momojie-S/dsh-workspace-env

社區目錄 URL 未在本文已覈實資料中出現,這裏不附未確認鏈接;可按插件名 dsh-workspace-env 在社區目錄檢索。

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

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

小夜