伙计我有以下问题,我在busybox主机中免费发出命令,我想检查我有多少内存空闲,我需要打印如果结果大于10M然后我应该返回一些东西喜欢"我有超过30M的免费"等...我不知道如何对待期望的输出。 我有代码片段
expect "$"
send "df -h\r"
expect "$"
send "uptime\r"
expect "$"
send "free | awk -F ' ' ' FNR == 2 {print \$3}'\r"
expect "$"
如何免费处理命令的输出?那个输出会给我带有我需要分析条件的空闲内存的整数。
答案 0 :(得分:0)
您可能需要检查Busybox版本的free
是否与GNU相同,但在我的Fedora系统上,free
的输出看起来像
total used free shared buffers cached
Mem: 3094900 2691252 403648 0 442924 983336
-/+ buffers/cache: 1264992 1829908
Swap: 2064380 126268 1938112
要获得空闲内存,可以这样做:
free | awk -F ' ' ' FNR == 2 {print \$4}'
捕获tcl变量中的Expect
输出:
set results $expect_out(buffer)
所以做你想做的事情就是
send "free | awk -F ' ' ' FNR == 2 {print \$4}'\r"
set freeram $expect_out(buffer)
if { $freeram >= 10000 } {
puts "You have lots of free memory.\n"
}
答案 1 :(得分:0)
由于您正在使用Linux变体(远程),通过ssh获取可用内存量的最简单方法是不使用free
。相反,您可以完全使用不同的方法:
spawn ssh $user@$theOtherHost cat /proc/meminfo
expect {
-re {MemTotal:\s+(\d+) kB} {
set total $expect_out(1,string)
exp_continue
}
-re {MemFree:\s+(\d+) kB} {
set free $expect_out(1,string)
exp_continue
}
"Password:" {
send "$thePassword\r"
exp_continue
}
eof {
# Do nothing; default fall-through is fine
}
}
puts "usage was $free out of $total (both in kilobytes)"