期望,需要在屏幕上处理表达和打印结果

时间:2014-07-17 17:39:34

标签: linux shell tcl expect

伙计我有以下问题,我在busybox主机中免费发出命令,我想检查我有多少内存空闲,我需要打印如果结果大于10M然后我应该返回一些东西喜欢"我有超过30M的免费"等...我不知道如何对待期望的输出。 我有代码片段

expect "$"
send "df -h\r"
expect "$"
send "uptime\r"
expect "$"
send "free | awk -F ' ' ' FNR == 2 {print \$3}'\r"
expect "$"

如何免费处理命令的输出?那个输出会给我带有我需要分析条件的空闲内存的整数。

2 个答案:

答案 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)"