执
执行系统命令(shell 命令行),返回结果(输出或错误)。
「命令」指你在终端里敲的那种命令行,由系统的命令解释器(shell)执行:
- Linux / macOS:交给
/bin/sh(等价于sh -c "命令") - Windows:写入临时批处理文件再交给 cmd 执行
xuantie
设 r = 执("dir") // Windows
设 r = 执("ls -l") // Linux/macOS
若 r.成功 { 示(r.值) }你可以……
- 取命令输出——
值是完整输出文本:
xuantie
设 r = 执("cd") // Windows:显示当前目录
设 r = 执("pwd") // Linux/macOS:显示当前目录
设 目录 = r.值.替换("\r", "").替换("\n", "")- 失败处理——非零退出码即失败,原因在
错误:
xuantie
设 r = 执(clang指令)
若 非 r.成功 { 示("编译失败: " & r.错误) }- 管道与重定向——命令字符串按 shell 语法解析,管道、重定向都可用:
xuantie
设 r = 执("cmd /c dir") // Windows:经 cmd 批处理执行
设 r = 执("ls -l | grep 玄铁") // Linux/macOS:ls 的输出转交给 grep注意
- 这是 shell 命令,不是文件路径:命令字符串会先被 shell 解析——
$(变量)、`(先执行里面的命令)、;(接着执行下一条)、|(管道)、*(通配)、&等字符有特殊含义,不是字面量。 - 不要让用户输入直接拼进命令字符串:用户填的内容会被 shell 当成命令的一部分执行(例如填
报告.txt; 删除全部,shell 看到;会真的执行「删除全部」)。这称为命令注入——先校验或转义再拼接。 - 同步阻塞:命令跑完才返回,长命令会卡住当前线程。
- stderr 已并入输出(内部
2>&1),命令的报错信息也在值里。 - 失败只看退出码:命令输出了错误文本但退出码为 0,仍判成功。
- 跨平台差异:Windows 下命令经 cmd 批处理执行,
%、^、&会被 cmd 二次解释;含中文路径/参数的指令建议先切 UTF-8 代码页(chcp 65001)。示例中带cmd /c的写法是 Windows 专用,Linux/macOS 没有 cmd。