为什么写这个
很多人以为 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(比如 vim、top、某些带密码提示的安装程序)。普通 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 能列出当前在跑和近期的任务,拿 sessionId 再 log / 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。
最小上手清单
- 小命令:直接说需求,AI 跑完给你解读。
- 慢命令:加后台,用
process查日志。 - 交互 CLI:开
pty。 - 批量处理:写成脚本落盘再跑。
- 密钥:只存
secrets,命令里不出现明文。
把这五条记住,OpenClaw 就从一个「聊天框」变成你机器上的远程终端 + 自动化助手。
扫码关注公众号,获取更多 OpenClaw 实操技巧:
