为什么写这个

很多人以为 OpenClaw 只能「对话」。其实它内置一个 exec 工具,能在你的机器上跑真实的 shell 命令——查进程、跑脚本、拉日志、压测、批处理文件,全都可以交给它。

这篇不讲概念,只讲怎么用、哪里会翻车。

基础:跑一条命令

最简单的用法,直接让 AI 执行命令并把结果读回来:

# 让 AI 帮你查磁盘占用
df -h /

# 让 AI 看某个目录最新的 10 个文件
ls -lt /var/log | head -10

AI 拿到 stdout 后会自己解读。你不需要把命令粘来粘去,一句话说需求即可。

注意:默认超时约 10 秒(yieldMs)。跑得快的小命令没问题;慢命令要用后台模式,见下文。

用法一:后台长任务(最常用)

跑一个会持续几分钟甚至几小时的命令,不要阻塞对话,加 background:true

# 后台跑一个数据导出,不卡住你
python3 export_jobs.py --all > /tmp/export.log 2>&1

后台启动后,AI 会继续干活或回你别的。要查进度:

# 看后台任务输出
process action:log sessionId:<返回的id>

或者用 process action:poll 轮询状态。长任务跑完会有完成事件推回来,不会静默失败。

用法二:PTY 模式跑交互式 CLI

有些命令必须 TTY(比如 vimtop、某些带密码提示的安装程序)。普通 exec 会卡住,要开 pty:true

# 跑一个需要交互的命令行工具
htop

AI 在 PTY 下能模拟键盘输入、读屏幕缓冲。这一步最容易踩坑:非交互命令加了 pty 反而多一层缓冲,没必要。

用法三:指定工作目录和环境变量

默认工作目录是 OpenClaw 的工作区。要换目录或注入环境变量:

# 在指定目录跑构建
cd /opt/app && npm run build

# 临时注入环境变量(不在命令里暴露真实密钥,用 secrets)
API_BASE=https://api.example.com python3 sync.py

真实密钥不要写进命令字符串。OpenClaw 有 secrets 机制,先存好再在配置里引用,命令里只出现变量名。

用法四:批处理文件最稳的方式

要处理一堆文件,让 AI 写一个小脚本落盘再执行,比让它一行行拼命令可靠:

# 让 AI 写成脚本
cat > /tmp/rename.sh <<'EOF'
for f in *.jpg; do
  mv "$f" "img_$(date +%s)_$f"
done
EOF
bash /tmp/rename.sh

脚本落盘的好处:可复查、可重跑、出错能定位到第几行。

用法五:用 yieldMs 控制后台时机

exec 有个 yieldMs 参数(默认 10000 毫秒),意思是「最多等这么久再转后台」。

  • 命令通常 2 秒跑完:不用管,默认就行。
  • 命令可能跑 30 秒:把 yieldMs 设大,比如 yieldMs:30000,避免它过早切后台让你多等一轮。

用法六:读历史任务

跑过的后台任务在哪看?用 process action:list 能列出当前在跑和近期的任务,拿 sessionIdlog / poll

三个真实会翻车的坑

坑 1:超时静默

默认 10 秒超时。一个 npm install 肯定超时,命令被中断但你不一定能立刻看出来。 对策:长命令一律 background:true,用 process 查结果,别赌默认超时。

坑 2:命令里有 shell 元字符

URL 带 ?&、正则带 |,直接丢给 shell 可能被解释成管道/后台。 对策:让 AI 用单引号包住整段,或写成脚本文件执行,别在对话里裸奔。

坑 3:把密钥写进命令

# 千万别这样
curl -H "Authorization: Bearer sk-xxxxxx" https://api.x.com

日志、历史、截图里都会留下明文。 对策:用 secrets 工具存好,命令里只引用变量名;网关出口走代理时不写明文 host。

最小上手清单

  1. 小命令:直接说需求,AI 跑完给你解读。
  2. 慢命令:加后台,用 process 查日志。
  3. 交互 CLI:开 pty
  4. 批量处理:写成脚本落盘再跑。
  5. 密钥:只存 secrets,命令里不出现明文。

把这五条记住,OpenClaw 就从一个「聊天框」变成你机器上的远程终端 + 自动化助手。


扫码关注公众号,获取更多 OpenClaw 实操技巧:

公众号二维码