Local MCP Server
在Termux中运行本地MCP服务器,支持Ollama模型的文件读取与命令执行。
帮助用户正确区分并使用Windows的PowerShell、cmd等命令行语法,避免跨平台错误。
openclaw skills install @loevery/windows-shell-syntax命令、参数、文件名以原文为准
当用户在 Windows 系统上询问终端命令、Shell 脚本、转义规则,或要求对比 Windows 与 Linux 终端语法时,请使用此技能。
不要将“Windows 终端语法”当作一个统一的概念。
在 Windows 上,必须区分以下几种环境:
powershell、pwsh)cmd)注意:Windows Terminal 只是一个终端应用程序,可同时承载多个 Shell。
如果无法确定用户使用的 Shell:
PowerShell: 和 cmd: 的命令示例。除非用户明确说明正在使用以下任意一种环境,否则绝不向 cmd 或 PowerShell 用户提供仅适用于 Bash 的语法:
以下为不应直接传递给 cmd/PowerShell 用户的 Bash 特有习惯(如未标注说明):
export NAME=value$VAR 表示环境变量\")rm、mv、cp 当作原生 cmd 命令\ 实现行续接&& / || 兼容性规则不要说“Windows 不支持 &&”。
实际兼容性矩阵如下:
&、&&、||&& 和 ||&& 和 ||&& 和 ||因此,问题核心是 具体使用哪个 Shell 以及 PowerShell 版本,而非简单地“是否在 Windows”。
若仅知用户处于 PowerShell 环境,但不确定是:
powershell)pwsh / 现代 PowerShell)则应避免使用 && / ||,改用显式的条件判断逻辑。
^& | ( ) < > ^^""..."%USERPROFILE%^ - 总是执行下一条:&
- 成功后执行下一条:&&
- 失败后执行下一条:||
'...' 表示纯文本字符串"..." 支持变量展开和插值 ``$env:USERPROFILE&& / ||&& / ||if 判断,而非管道链操作符\'...'"..."$HOME、$VAR\当用户请求命令但未指定 Shell 时,应优先采用以下结构:
PowerShell:
<命令>
cmd:
<命令>禁止仅提供一个未标注的命令,尤其当不同 Shell 语法存在差异时。
若版本兼容性重要,应采用以下结构:
PowerShell 5.1 兼容:
<命令>
PowerShell 7+:
<命令>
cmd:
<命令>若原本计划使用 Bash 链接方式,请根据实际 Shell 重写:
cmd1 && cmd2cmd1 && cmd2cmd1 && cmd2cmd1; if ($?) { cmd2 }示例:
PowerShell 5.1 兼容:
cmd1
if ($?) { cmd2 }
PowerShell 7+:
cmd1 && cmd2
cmd:
cmd1 && cmd2&& 的方法当用户反馈 && 无效时,首先推断其可能的 Shell 环境:
- cmd1 && cmd2 → cmd1; if ($?) { cmd2 }
- cmd1 || cmd2 → cmd1; if (-not $?) { cmd2 }
&& / ||&& / || 有效,通常可保持不变对于 PowerShell 中的原生可执行文件(如 .exe 或外部 CLI),若需精确控制退出码行为,建议使用更明确的形式:
cmd1
if ($LASTEXITCODE -eq 0) { cmd2 }该写法特别适用于左操作数为 .exe 或外部命令且需准确判断进程退出状态的场景。
export NAME=value$env:NAME = 'value'set NAME=value读取变量值:
$NAME$env:NAME%NAME%始终对包含空格的 Windows 路径进行引号包裹:
"C:\Program Files\App""C:\Program Files\App"^ 转义特殊字符及引号敏感场景。示例:
PowerShell:
python -c 'print("hello")'
cmd:
python -c "print(^\"hello^\")"cmd 示例应保持简洁、测试感强;因为 cmd 引号处理极易混乱。
优先使用各 Shell 的原生多行写法:
PowerShell:
& python `
script.py `
--name test
cmd:
python ^
script.py ^
--name test若单行命令可接受,则优先选择单行形式。
对于 cmd 和 PowerShell,深层嵌套引号极易变得脆弱,尤其在以下情况:
python -c "..."一旦引号处理开始变得复杂,应优先考虑重构命令,而非强行完美转义。
首选安全替代方案:
经验法则:如果示例需要一段文字来解释转义规则,应重写实现方式。
Windows shell 在重定向和管道行为上差异较大。
如果某个命令依赖复杂的重定向逻辑,优先采用更简单的模式:
经验法则:如果正确性依赖于细微的管道或重定向语义,应选择更显式的多步形式。
当用户粘贴 Bash 命令并希望获得 Windows 等效命令时,可参考此部分。
cmd1 && cmd2Bash:
cmd1 && cmd2
PowerShell 5.1 兼容:
cmd1
if ($?) { cmd2 }
PowerShell 7+:
cmd1 && cmd2
cmd:
cmd1 && cmd2cmd1 || cmd2Bash:
cmd1 || cmd2
PowerShell 5.1 兼容:
cmd1
if (-not $?) { cmd2 }
PowerShell 7+:
cmd1 || cmd2
cmd:
cmd1 || cmd2export NAME=valueBash:
export NAME=value
PowerShell:
$env:NAME = 'value'
cmd:
set NAME=valueecho $NAMEBash:
echo $NAME
PowerShell:
echo $env:NAME
cmd:
echo %NAME%~/file.txtBash:
cat ~/file.txt
PowerShell:
Get-Content $HOME\file.txt
cmd:
type %USERPROFILE%\file.txtrm, cp, mvBash:
rm file.txt
cp a.txt b.txt
mv a.txt b.txt
PowerShell:
Remove-Item file.txt
Copy-Item a.txt b.txt
Move-Item a.txt b.txt
cmd:
del file.txt
copy a.txt b.txt
move a.txt b.txtVAR=value command此 Bash 模式在 PowerShell 或 cmd 中没有完全对应的语法形式。
Bash:
NAME=value mytool
PowerShell:
$env:NAME = 'value'
mytool
cmd:
set NAME=value
mytool如果临时作用域的行为很重要,请说明:Bash 可以将环境变量作用域限定为单个命令,而 PowerShell/cmd 的示例通常需要额外清理操作才能实现真正的单命令作用域。
--flag value`
Bash:
command \
--flag value
PowerShell:
command `
--flag value
cmd:
command ^
--flag valuegrep pattern file.txtBash:
grep pattern file.txt
PowerShell:
Select-String pattern file.txt
cmd:
findstr pattern file.txtpwd 和 lsBash:
pwd
ls
PowerShell:
Get-Location
Get-ChildItem
cmd:
cd
dir注意:ls 和 pwd 在 PowerShell 中可能看似可用,是因为存在别名。但在教学 shell 语法时,应优先使用原生命令名称。
判断 && 在 PowerShell 中是否安全时,可参考以下启发式规则:
shell=powershell,仅表示 shell 类型,不保证确切版本pwsh 通常表示 PowerShell 7+powershell 通常表示 Windows PowerShell 5.1,常见于旧版或默认的 Windows 系统如需检测版本,可提供以下命令:
PowerShell:
$PSVersionTable.PSVersion回复 Windows 用户时遵循以下原则:
shell=powershell 时,优先使用 PowerShell 示例cmd 或使用 ^",则使用 cmd 语法回答&&,应区分 cmd、PowerShell 7+ 和 PowerShell 5.1,而非一概而论使用简洁表达,例如:
Windows Terminal 只是终端应用程序;实际语法取决于你运行的是 PowerShell 还是 cmdcmd 中,特殊字符需用 ^ 转义&& 在 cmd 和 PowerShell 7+ 中有效,但在 Windows PowerShell 5.1 中无效cmd 通常使用 ^ 来转义特殊字符cmd1; if ($?) { cmd2 } 比假设支持 && 更安全已收录 1 个 Skill