我在期望脚本中发送命令时遇到问题。我以前从未使用过expect,所以它有很多我不知道的特殊性,主要是关于语法。
实际上它捕获了cpu使用btw。
顶部 -n 10 -d 0.01 | awk 'BEGIN{FS="[,%]"; printf "(" }/^Cpu/{ gsub(/[^0-9.,]+/,"",$7); gsub(/^3949/,"",$7); printf $7" + "} END {打印 0") / 10"}' | 公元前
我想做的是:期望,使用命令发送。我想通过脚本传递那个字符串。
我正在尝试这种方式:
#!/bin/expect
set timeout 20
set user [lindex $argv 0]
set password [lindex $argv 1]
set host [lindex $argv 2]
set prompt "$ "
;
proc gestat { } {
;
send -- "echo -n 'MEMORY_FREE: ' && free -t | grep 'buffers/cache' | awk '{print \$4/(\$3+\$4) * 100}'\r"
send -- "top -n 10 -d 0.01 | awk \'BEGIN{FS='[,%]'; printf '(' }/^Cpu/{ gsub(/[^0-9.,]+/,'',\$7); gsub(/^3949/,'',\$7); printf \$7' + '} END{print 0') / 10'}\' | bc\r"
return
}
;
spawn ssh $user@$host
while (1) {
expect {
"(yes/no)? " {
send -- "yes\r"
}
"password: " {
send -- "$password\r"
}
"$prompt" {
gestat
break
}
}
}
expect "$prompt"
send -- "exit\r"
expect eof
但是发送不起作用。错误是:
执行“,%”时命令名称“,%”无效(过程“gestat”第 4 行)
我想这将是因为期望“解析器”。但我真的不知道。对不起我糟糕的英语。