尝试在bash中运行expect脚本时出错



这是我的脚本版本,它首先尝试从容器角度获取docker统计数据,然后转到预期部分,通过按下x键启动测试工具来获取统计数据。脚本如下:

#!/bin/bash
#!/usr/bin/expect -f
docker stats --no-stream --format "{"container": "{{ .Name }}", "memory": { "raw": "{{ .MemUsage }}", "percent": "{{ .MemPerc }}"}, "cpu": "{{ .CPUPerc }}"}"
#docker cp new.sh main:/app/aicore/state_tools/
docker exec main bash -c "cd aicore/state_tools; pwd;
/usr/bin/expect << 'EOF'
set timeout -1
for { set i 0 } { $i < 300000 } { incr i } {
spawn /app/aicore/state_tools/ss_tester
expect "Exit"
send -- "xr"
expect "press"
send -- "s03"
sleep 300
}
EOF"

我得到的错误如下:表达式"中@处缺少操作数@<300000";(解析表达式"<300000"(从内部调用"对于{set i 0}{<300000}{生成/app/aicore/state_tools/ss_ster期望退出发送--xr预期压力发送--s03睡眠300}">

有人能指导我在代码中做错了什么吗?

看起来像是一个引用问题。您已经引用了此处文档的EOF,这应该可以防止对其内容进行替换,但在将其传递给docker后适用。但在它到达那个阶段之前,它会被运行脚本的shell处理,这将在它被传递给docker之前尝试替换$i。我会尝试在$i前面放一个反斜杠来防止这种情况,即$i

最新更新