Windows 下折腾 opencode 的踩坑记录
最近在 Windows 主力机上折腾 opencode 及其插件 oh-my-opencode,过程中遇到了不少“水土不服”的问题。特此记录两个卡住我许久的坑及其解决思路。 爱壹帆 约炮

一、 BunInstallFailedError 与杀毒软件的“手速”之争
在安装插件依赖后,启动 opencode 直接抛出错误: 小宝影院 电影aiyifan 爱壹帆影视 爱壹帆国际版 外围 探花
{
"name": "BunInstallFailedError",
"data": { "pkg": "oh-my-opencode", "version": "latest" }
}通过运行 opencode stats 定位到日志文件,核心报错信息指向了权限问题: xxxvideo xnxx xxxx 伴游
error: moving "typescript" to cache dir failed
EPERM: Operation not permitted (NtSetInformationFile())初看以为是系统文件权限不足,但手动操作文件一切正常。深入排查后发现,这其实是一场 Bun 与杀毒软件的竞速赛。 华人影视 爱壹帆在线 爱一帆 小寶影院电影 爱一帆电影
Bun 下载并解压文件的速度极快,当它试图将临时文件移动到缓存目录时,Windows Defender(或第三方杀毒软件)监测到写入动作,立即触发实时扫描并对文件夹进行了 文件锁(Lock)。Bun 此时尝试重命名或移动,便会因文件被占用而报错。 电影爱壹帆 免费在线影院 约炮
解决方法: 最彻底的办法是将相关路径加入杀毒软件的白名单。这也提供了一个排查 Windows 下开发环境问题的思路:遇到莫名的 EPERM 或编译卡顿[^1],除了查权限,不妨先关掉杀毒软件试试。 爱壹帆电影 小寶影院 小宝影院电影
二、 Agent 无法识别 export 命令
在使用 /review 或要求 Agent 执行 git 命令时,会陷入无限报错循环: xxx 爱壹帆 小宝影院 海外华人视频网
'export' is not recognized as an internal or external command...原因是插件为了禁用交互式提示,强行在命令前注入了一长串 Unix 风格的环境变量定义(如 export CI=true ...)[^2],却错误地在 Windows 环境下也执行了这套逻辑。 小宝影院电影 约炮
既然暂时无法轻易修改插件源码,不如在系统层面“欺骗”它。我们可以编写一个 export.cmd 脚本放在 PATH 路径下(如 C:\WINDOWS\system32),模拟 Unix 的 export 行为。 小宝影院 ifun aiyifan 电影爱壹帆
新建 export.cmd 内容如下: xxxxxx 电影小宝影院 爱壹帆免费版 iyf 小宝影院在线视频 寻芳网
@echo off
REM export.cmd - 在 Windows 上模拟 Unix export 命令
REM 用法:export VAR1=value1 VAR2=value2 ...; command args
setlocal EnableDelayedExpansion
set "_INPUT=%*"
set "_TMPFILE=%TEMP%\_export_%RANDOM%.cmd"
echo @echo off > "!_TMPFILE!"
set "_FOUND_SEMI=0"
REM 简单的解析逻辑:分离环境变量与后续命令
for /f "tokens=1,* delims=;" %%A in ("!_INPUT!") do (
set "_ENV_VARS=%%A"
set "_COMMAND=%%B"
if not "%%B"=="" set "_FOUND_SEMI=1"
)
REM 既然是模拟,重点在于不报错并执行后续命令
REM 这里将解析到的变量写入临时脚本
:parse_vars
if "!_ENV_VARS!"=="" goto execute
for /f "tokens=1,*" %%A in ("!_ENV_VARS!") do (
set "_TOKEN=%%A"
set "_ENV_VARS=%%B"
echo !_TOKEN! | findstr "=" >nul 2>&1
if !errorlevel!==0 (
for /f "tokens=1,* delims==" %%K in ("!_TOKEN!") do (
set "_KEY=%%K"
set "_VAL=%%L"
if "!_VAL!"=="''" set "_VAL="
echo set "!_KEY!=!_VAL!" >> "!_TMPFILE!"
)
)
)
goto parse_vars
:execute
if !_FOUND_SEMI!==1 (
REM 去除命令前的空格
:trim_spaces
if "!_COMMAND:~0,1!"==" " (
set "_COMMAND=!_COMMAND:~1!"
goto trim_spaces
)
if not "!_COMMAND!"=="" echo !_COMMAND! >> "!_TMPFILE!"
)
REM 执行生成的临时脚本并清理
endlocal
call "!_TMPFILE!"
del "!_TMPFILE!" 2>nul
这个脚本能简单解析 key=value 并执行分号后的命令。实测加上这个“补丁”后,Agent 终于能正常运行 git status 了。 xxxxx 寻芳阁 寻芳阁
[^1]: Windows11 下由 Windows Defender 造成的 C 语言代码编译运行卡顿 - Michael Song's Blog
[^2]: oh-my-opencode 源码中的 buildEnvPrefix 定义 aiyifan电影 爱壹帆国际版 爱一帆