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 pwshbash 链路未覆盖。
  • 升级 DSH 后建议重跑验证。

结尾

dsh-workspace-env 的价值在于把环境变量管理下沉到 workspace:同一个 DSH profile 下,不同项目目录可以各自携带自己的 .envpwsh 子进程每次调用时现读现注入。它适合需要按项目隔离环境变量的 DSH 使用场景。

GitHub:

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

社区目录 URL 未在本文已核实资料中出现,这里不附未确认链接;可按插件名 dsh-workspace-env 在社区目录检索。

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

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

小夜