目前在项目中逐步使用 claude code 和 open code 配合国产 minimax 模型,进行代码开发。

open code 在开源开放,原生支持大多数模型提供商,这两个特点上,给我留下深刻印象。

但是一直有个很影响使用的问题,就是 open code 将 powershell 作为 windows 的 first class shell,但是其兼容性做的并没有 claude code 那么好。 时不时它会执行一些 unix specific 指令,例如 head, ls -la 这类。和 powershell 并不完全兼容。它会卡一下,报出执行错误,然后幡然醒悟,切换到其他可以执行的命令。

这种时不时会卡顿的感觉,不断知错 > 犯错 > 改错 > 再犯错的循环,让人抓狂。

我之前尝试通过 AGENTS.md 规则配置文件,试图让它知道不要执行这些命令。或者让它将命令转换为 powershell 兼容的命令再执行。但是这些规则配置不能百分百生效。

终于我花了半个小时,搜了下它的 github 仓库,发现其 ts 代码中存在对于 git bash 路径的搜索支持: https://github.com/anomalyco/opencode/blob/dev/packages/opencode/src/shell/shell.ts

也知道了如何配置,能让 open code 和 claude 一样,使用 git bash 作为默认 shell。

确认opencode的shell

  1. 简单的办法:在 git bash 中运行 open code,而不是 cmd 或 powershell
  2. 复杂一点(推荐): 编辑系统环境变量 > 添加 SHELL 变量 > 设置值为 C:\Program Files\Git\bin\bash.exe > 重启终端运行 open code

环境变量

下面简单讲解下原理: open code 会读取当前的 SHELL 变量,在 git bash 中运行时,可以查看到 SHELL=/usr/bin/bash

git bash

根据项目源码,参数传递顺序是 select(process.env.SHELL) > full(file)

源码1

源码2

源码3

源码4

cmd / PowerShell 运行 open code 时,默认没有 SHELL 变量设置。此时可以通过补齐系统环境变量,设置使用 git bash。
源码3 中 full 这个方法的处理逻辑比较全面:

  1. 传 “bash”,会在系统 PATH 中自行寻找
  2. 传 “/usr/bin/bash”,会通过 gitbash 方法查找,可以通过 OPENCODE_GIT_BASH_PATH 变量覆盖
  3. 传 “C:\Program Files\Git\bin\bash.exe”,也会直接返回

所以设置 SHELL 变量为 “bash”,不做额外配置的话,可能会使用 WSL 的 bash.exe

好的,今天就分享到这里。如果觉得本文对你有帮助,可以关注公众号 “简明开发”,或者订阅我的知乎专栏,来获取内容推送。