コマンドsendinexpectスクリプトに問題があります。私はこれまでexpectを使用したことがないので、主に構文についてはわからないほど多くの特殊性があります。
実際には、CPU使用率をキャッチします。
top -n 10 -d 0.01 | awk'BEGIN {FS = "[、%]"; printf "("} / ^ Cpu / {gsub(/ [^ 0-9。、] + /、 ""、$ 7); gsub(/ ^ 3949 /、 ""、$ 7); printf $ 7 "+"} END {print 0 ")/ 10"}'| 紀元前
私がやりたいのは、expectを使用して、コマンドsendを使用することです。その文字列をスクリプトで渡したい。
私はこの方法を試しています:
#!/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行目)
「パーサー」を期待しているからだと思います。しかし、私は本当に知りません。英語が下手でごめんなさい。