尝试 运行 期望 bash 中的脚本时出错
Getting error while trying to run expect script inside bash
这是我的脚本版本,它首先尝试明智地获取 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 -- "x\r"
expect "press"
send -- "\s03"
sleep 300
}
EOF"
我得到的错误如下:
@ 处缺少操作数
在表达式“ @< 300000 ”
(解析表达式“<300000”)
从内部调用
“对于 { 设置 i 0 } { < 300000 } { incr i } {
产卵 /app/aicore/state_tools/ss_tester
期望退出
发送——xr
期待媒体
发送——s03
睡300
}"
有人可以指导我在代码中做错了什么吗?
看起来像是引用问题。您已经为 here-document 引用了 EOF,这应该可以防止对其内容进行替换,但是在它传递给 docker 之后仍然适用。但在它到达那个阶段之前,它会被 shell 处理,这是 运行 你的脚本,并且它会在它被传递给 docker 之前尝试替换 $i。我会尝试在 $i
前面放一个反斜杠来防止这种情况,即 $i
.
这是我的脚本版本,它首先尝试明智地获取 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 -- "x\r"
expect "press"
send -- "\s03"
sleep 300
}
EOF"
我得到的错误如下: @ 处缺少操作数 在表达式“ @< 300000 ” (解析表达式“<300000”) 从内部调用 “对于 { 设置 i 0 } { < 300000 } { incr i } { 产卵 /app/aicore/state_tools/ss_tester 期望退出 发送——xr 期待媒体 发送——s03 睡300 }"
有人可以指导我在代码中做错了什么吗?
看起来像是引用问题。您已经为 here-document 引用了 EOF,这应该可以防止对其内容进行替换,但是在它传递给 docker 之后仍然适用。但在它到达那个阶段之前,它会被 shell 处理,这是 运行 你的脚本,并且它会在它被传递给 docker 之前尝试替换 $i。我会尝试在 $i
前面放一个反斜杠来防止这种情况,即 $i
.