CliAI 起步于 Linux 和 macOS,假设是 bash 或 zsh、Unix 风格的 fork-exec 移交。Windows 的路径真的不一样:没有 $SHELL,shell 启动器来自 $COMSPEC(或者终端直接打开 pwsh.exe),命令本身也不同。我们把「平等」当成产品目标,而不是打勾项。
「平等」是什么意思
它不是把 Unix 命令翻译成 Windows。它是同一句自然语言在你所处的 shell 下产出正确的命令。Linux 上问「列出监听端口」会看到 ss -ltnp;Windows 的 PowerShell 上问同样的话,会看到 Get-NetTCPConnection。
PowerShell
PS C:\> clai 列出监听 TCP 端口及对应进程名→ Get-NetTCPConnection -State Listen ` | Select-Object LocalAddress, LocalPort, @{N='Process';E={(Get-Process -Id $_.OwningProcess).ProcessName}}LocalAddress LocalPort Process0.0.0.0 80 nginx0.0.0.0 443 nginx
再看三个 PowerShell 例子
查找大于 100 MB 的文件
PowerShell
PS C:\> clai 在 D:\projects 下找出大于 100 MB 的文件→ Get-ChildItem -Path D:\projects -Recurse -File ` | Where-Object { $_.Length -gt 100MB } ` | Sort-Object Length -Descending ` | Select-Object FullName, Length
杀掉端口上的进程
PowerShell
PS C:\> clai 杀掉占用 8080 端口的进程→ Stop-Process -Id (Get-NetTCPConnection -LocalPort 8080).OwningProcess -Force[Safety: CAUTION] — 等同于 SIGKILL。
跟踪日志文件
PowerShell
PS C:\> clai 跟踪 C:\app\error.log 最后 100 行→ Get-Content -Path C:\app\error.log -Tail 100 -Wait
底下做了什么
当你按 Enter 执行时,CliAI:
- 读取
$COMSPEC(默认cmd.exe);如果当前宿主是 PowerShell,则使用pwsh.exe。 - 把生成的命令作为参数启动 shell——Windows 没有
fork/exec模型。 - 命令在你当前控制台运行,使用你的环境、当前目录和 PSReadLine 历史。
仍有差异的地方
- 标准输入到
clai自身有些小差异;尤其是 ANSI 颜色去除在 legacycmd中行为不同。Windows Terminal 或 pwsh 体验最好。 - 路径展开。 拖入带空格的路径仍需要引号。CliAI 会引用生成的命令,但请你也加引号传源路径。