linux - Expect ,需要处理表达式并在屏幕上打印结果

标签 linux shell tcl expect

伙计们,我遇到了以下问题,我在 busybox 主机中发出 free 命令,我想检查我有多少可用内存,如果结果大于 10M,我需要打印,然后我应该返回类似“我有超过 30M 可用空间”等内容...我不知道如何处理 Expect 的输出。 我有代码片段

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

如何自由地处理命令的输出?该输出将为我提供整数以及分析条件所需的可用内存。

最佳答案

您可能想检查 free 的 Busybox 版本是否与 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"
}

关于linux - Expect ,需要处理表达式并在屏幕上打印结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24810101/

相关文章:

linux - 在平面文件中用单引号括起一个字段

bash - 如何解析 shell 中的长格式参数?

linux - 在linux中按字母数字优先排序数字

arguments - 为什么 Tcl 允许过程名称带空格,但参数不允许带空格?

TCL 在新线上使用 elseif

c - 在 C 中追加到文件开头

python - 编译时出现 GCC 错误 : cc1 out of memory error

shell - 如何重定向 shell 脚本所有输出的副本?

.net - DSL : TCL or Lisp? 有什么更好的

linux - python中使用ssl握手失败如何解决?