PowerShell 和 Codex 在打架?可以试试这份提示词
今天花时间写了篇 codex 下使用 PowerShell 的文章,在 V2EX 上也发一份。
## 背景
最近半年一直 Windows 下使用 **Codex** 开发项目,逐渐把开发环境打造得更接近 Linux 下的开发体验。最近看到很多人反馈 PowerShell 和 Codex 打架的情况,因为这问题我之前就解决了,所以想分享下我的方案。
现在这套环境谈不上多复杂,主要有两个重点:
**先把终端环境统一,再用提示词把大模型的命令习惯掰过来。**
## 先安装 pwsh 7 和 Windows Terminal
如果你还在使用系统自带的 Windows PowerShell 5.1,建议先换成现代 shell:PowerShell 7(pwsh)。
至于 PowerShell 5.1 和 PowerShell 7 的区别,可以找 AI 给你解释一下,但是结论不变:
**现代 Windows 开发环境最好统一到 pwsh 7。**
可以直接用 `winget` 安装:
```powershell
winget install --id Microsoft.PowerShell --source winget
```
也可以从 [PowerShell 官方安装页面](https://learn.microsoft.com/zh-cn/powershell/scripting/install/install-powershell-on-windows) 下载 MSI 安装包手动安装。
安装后验证,在命令行中输出版本号:
```powershell
PS C:\Users\AAA> pwsh -v
PowerShell 7.x
```
原生的 PowerShell 界面很丑,所以必安装另一个 Windows 神器 `Windows Terminal`。它的价值不只是好看,而是把 `pwsh`、Git Bash、远程 SSH 等环境放在同一个窗口里管理,支持标签页、分屏、统一的字体和编码设置。平时一边让 Codex 在一个窗口里执行命令,一边查看日志或运行服务,效率会高很多。
```powershell
winget install --id Microsoft.WindowsTerminal --source winget
```
也可以通过 [Windows Terminal 官方安装页面](https://learn.microsoft.com/zh-cn/windows/terminal/install) 进入 GitHub Releases,下载对应安装包手动安装。
安装完成后,把 Windows Terminal 的默认配置文件设为 **PowerShell 7**。这样打开后默认就是 pwsh7 的环境。所有提示词、命令和排错过程,都应该建立在同一个 shell 上。
## 安装 `rg`
`rg` 就是 **ripgrep**,一个非常适合在代码仓库里搜索文本的命令行工具,速度快,默认会遵守 `.gitignore`,输出也比 PowerShell 原生搜索更适合直接交给 AI 阅读。
但要注意,`rg` 并不是 Windows 原生命令。需要提前安装一下。
```powershell
# 使用 winget 安装
winget install BurntSushi.ripgrep.MSVC
# 或者使用 Scoop 进行安装
scoop install ripgrep
```
当然也可以从 [ripgrep 官方下载页面](https://ripgrep.dev/download/) 手动下载 Windows 安装包。
安装后记得重新打开 Windows Terminal,否则当前终端可能还没有刷新 PATH。
安装完成后,可以用下面的命令确认是否生效:
```powershell
rg --version
```
## 加提示词约束
把终端环境换好只是第一步。真正影响体验的,是要明确告诉 Codex:**当前项目使用的是 PowerShell,不是 Bash。**
大模型在训练时接触过的编程语料、命令示例和工具调用记录里,Linux、Bash 的比例非常高。所以当你只说“执行一个命令”时,它很容易下意识写出 `grep`、`sed`、`cat` 或 `&&` 这一套 Bash 习惯。命令本身可能没错,但放到 `pwsh` 里就会报错,或者产生和预期不同的结果。
这套提示词约束已经让我在 Windows 环境下顺畅工作了几个月,现在直接分享在下面:
```markdown
## Windows 约束
当前环境是 Windows 10 / pwsh7
- 默认禁止使用 Bash 语法,除非确定此 shell 处在 Linux 环境
- 不要使用 Bash 引号/转义习惯,在 PowerShell 命令里,复杂正则优先用单引号包裹。
- 如果正则本身同时包含单引号和双引号,优先拆成多个简单 rg 命令。
- 执行多行 Python 禁止使用 Bash heredoc;改用 PowerShell here-string | python -
- pwsh 中,语句块表达式(如 `foreach`、`if`)不能直接作为管道输入。需要先使用 `$()` / `@()` 包裹,或先赋值给变量。普通命令输出可直接进入管道,无需额外包裹。
- PowerShell 使用 `rg` 时,通配目录必须先用 `Get-ChildItem -Filter` 展开为真实路径,禁止直接把含 `*` 的搜索路径传给 `rg`。
```
- 可以直接把这段提示词复制到 `C:/Users/<userName>/.codex/[AGENTS.md](http://agents.md/)` 里
- 我这边用的是 `Windows 10 LTSC`,你可以换成你的系统
这套提示词不是为了限制 Codex,而是为了减少它在 shell 之间切换时的冲突。特别是引号、管道、正则和多行脚本,这几类问题经常会打架,一旦出错,让 AI 自动修正会浪费很多时间。
## 为什么这几条约束值得保留
- **明确 shell**:让 Codex 从一开始就知道命令要交给 `pwsh`,避免默认生成 Bash 命令。
- **约束引号和转义**:PowerShell 的字符串、正则和变量展开规则不同,先规定写法,能少踩一轮转义的坑。
- **替代 heredoc**:Windows 下没有 Bash heredoc,PowerShell here-string 才是稳定的多行文本方案。
- **处理语句块管道**:`foreach`、`if` 这类语句块不能直接当作普通管道输入,提前写进规则后,Codex 不会反复生成同一种错误写法。
- **处理 `rg` 通配路径**:先展开真实目录再搜索,比把 `*` 直接交给命令更符合 PowerShell 和 Windows 的路径行为。
我的经验是,提示词不需要写得特别长,但要把**最容易出错、而且会反复出错的地方**说清楚。规则稳定下来之后,Codex 执行命令的成功率会明显提高,来回打架解释“这不是 Bash,请改成 PowerShell”的次数也少很多。
## 总结
Codex 下 PowerShell 执行时打架的原因,就是因为它在猜你的 shell。
把环境写清楚,把容易错的语法提前约束好,Windows 下的开发体验会立刻稳定提升一截。
---
> 原创声明: 本文首发于个人博客 [原文地址](https://blog.knowckx.de/) 欢迎各位大佬交流
---
原文链接:[点击查看](https://www.v2ex.com/t/1228204)
## 背景
最近半年一直 Windows 下使用 **Codex** 开发项目,逐渐把开发环境打造得更接近 Linux 下的开发体验。最近看到很多人反馈 PowerShell 和 Codex 打架的情况,因为这问题我之前就解决了,所以想分享下我的方案。
现在这套环境谈不上多复杂,主要有两个重点:
**先把终端环境统一,再用提示词把大模型的命令习惯掰过来。**
## 先安装 pwsh 7 和 Windows Terminal
如果你还在使用系统自带的 Windows PowerShell 5.1,建议先换成现代 shell:PowerShell 7(pwsh)。
至于 PowerShell 5.1 和 PowerShell 7 的区别,可以找 AI 给你解释一下,但是结论不变:
**现代 Windows 开发环境最好统一到 pwsh 7。**
可以直接用 `winget` 安装:
```powershell
winget install --id Microsoft.PowerShell --source winget
```
也可以从 [PowerShell 官方安装页面](https://learn.microsoft.com/zh-cn/powershell/scripting/install/install-powershell-on-windows) 下载 MSI 安装包手动安装。
安装后验证,在命令行中输出版本号:
```powershell
PS C:\Users\AAA> pwsh -v
PowerShell 7.x
```
原生的 PowerShell 界面很丑,所以必安装另一个 Windows 神器 `Windows Terminal`。它的价值不只是好看,而是把 `pwsh`、Git Bash、远程 SSH 等环境放在同一个窗口里管理,支持标签页、分屏、统一的字体和编码设置。平时一边让 Codex 在一个窗口里执行命令,一边查看日志或运行服务,效率会高很多。
```powershell
winget install --id Microsoft.WindowsTerminal --source winget
```
也可以通过 [Windows Terminal 官方安装页面](https://learn.microsoft.com/zh-cn/windows/terminal/install) 进入 GitHub Releases,下载对应安装包手动安装。
安装完成后,把 Windows Terminal 的默认配置文件设为 **PowerShell 7**。这样打开后默认就是 pwsh7 的环境。所有提示词、命令和排错过程,都应该建立在同一个 shell 上。
## 安装 `rg`
`rg` 就是 **ripgrep**,一个非常适合在代码仓库里搜索文本的命令行工具,速度快,默认会遵守 `.gitignore`,输出也比 PowerShell 原生搜索更适合直接交给 AI 阅读。
但要注意,`rg` 并不是 Windows 原生命令。需要提前安装一下。
```powershell
# 使用 winget 安装
winget install BurntSushi.ripgrep.MSVC
# 或者使用 Scoop 进行安装
scoop install ripgrep
```
当然也可以从 [ripgrep 官方下载页面](https://ripgrep.dev/download/) 手动下载 Windows 安装包。
安装后记得重新打开 Windows Terminal,否则当前终端可能还没有刷新 PATH。
安装完成后,可以用下面的命令确认是否生效:
```powershell
rg --version
```
## 加提示词约束
把终端环境换好只是第一步。真正影响体验的,是要明确告诉 Codex:**当前项目使用的是 PowerShell,不是 Bash。**
大模型在训练时接触过的编程语料、命令示例和工具调用记录里,Linux、Bash 的比例非常高。所以当你只说“执行一个命令”时,它很容易下意识写出 `grep`、`sed`、`cat` 或 `&&` 这一套 Bash 习惯。命令本身可能没错,但放到 `pwsh` 里就会报错,或者产生和预期不同的结果。
这套提示词约束已经让我在 Windows 环境下顺畅工作了几个月,现在直接分享在下面:
```markdown
## Windows 约束
当前环境是 Windows 10 / pwsh7
- 默认禁止使用 Bash 语法,除非确定此 shell 处在 Linux 环境
- 不要使用 Bash 引号/转义习惯,在 PowerShell 命令里,复杂正则优先用单引号包裹。
- 如果正则本身同时包含单引号和双引号,优先拆成多个简单 rg 命令。
- 执行多行 Python 禁止使用 Bash heredoc;改用 PowerShell here-string | python -
- pwsh 中,语句块表达式(如 `foreach`、`if`)不能直接作为管道输入。需要先使用 `$()` / `@()` 包裹,或先赋值给变量。普通命令输出可直接进入管道,无需额外包裹。
- PowerShell 使用 `rg` 时,通配目录必须先用 `Get-ChildItem -Filter` 展开为真实路径,禁止直接把含 `*` 的搜索路径传给 `rg`。
```
- 可以直接把这段提示词复制到 `C:/Users/<userName>/.codex/[AGENTS.md](http://agents.md/)` 里
- 我这边用的是 `Windows 10 LTSC`,你可以换成你的系统
这套提示词不是为了限制 Codex,而是为了减少它在 shell 之间切换时的冲突。特别是引号、管道、正则和多行脚本,这几类问题经常会打架,一旦出错,让 AI 自动修正会浪费很多时间。
## 为什么这几条约束值得保留
- **明确 shell**:让 Codex 从一开始就知道命令要交给 `pwsh`,避免默认生成 Bash 命令。
- **约束引号和转义**:PowerShell 的字符串、正则和变量展开规则不同,先规定写法,能少踩一轮转义的坑。
- **替代 heredoc**:Windows 下没有 Bash heredoc,PowerShell here-string 才是稳定的多行文本方案。
- **处理语句块管道**:`foreach`、`if` 这类语句块不能直接当作普通管道输入,提前写进规则后,Codex 不会反复生成同一种错误写法。
- **处理 `rg` 通配路径**:先展开真实目录再搜索,比把 `*` 直接交给命令更符合 PowerShell 和 Windows 的路径行为。
我的经验是,提示词不需要写得特别长,但要把**最容易出错、而且会反复出错的地方**说清楚。规则稳定下来之后,Codex 执行命令的成功率会明显提高,来回打架解释“这不是 Bash,请改成 PowerShell”的次数也少很多。
## 总结
Codex 下 PowerShell 执行时打架的原因,就是因为它在猜你的 shell。
把环境写清楚,把容易错的语法提前约束好,Windows 下的开发体验会立刻稳定提升一截。
---
> 原创声明: 本文首发于个人博客 [原文地址](https://blog.knowckx.de/) 欢迎各位大佬交流
---
原文链接:[点击查看](https://www.v2ex.com/t/1228204)
· 0 个赞
· 0 个赞
· 0 个赞
· 0 个赞
· 0 个赞
· 0 个赞
· 0 个赞
· 0 个赞
· 0 个赞
· 0 个赞
· 0 个赞
· 0 个赞
· 0 个赞