获取与LINUX主机的总内存/的处置(Get Total Memory of a host with

2019-10-16 15:25发布

我想用“.EXP”脚本来获得一台主机的内存总量。

主机内进入后,我执行下面一行:

"send "top -n 1 | grep Mem: | awk '{ print $(NF-7) }' | cut -d 'k' -f1\r""

在执行该脚本,它返回以下错误:

 can't read "(NF-7)": no such variable

但是,如果手动得到主机的内部,并执行相同的线(不带“送”的一部分),它返回我的预期数量...

我做错了吗? 任何想法? 做同样的另一种方式的任何建议?

最好的问候和感谢提前,

安东尼奥

Answer 1:

的输出top并不意味着解析这种方式。 你可以在其他的,更容易(好!)方式的内存量。

sed -n -e '/^MemTotal/s/^[^0-9]*//p' /proc/meminfo

或者,您可以解析的输出free ,也知道如何在方便的尺寸显示:

# total memory in megabytes
free -m | sed  -n -e '/^Mem:/s/^[^0-9]*\([0-9]*\) .*/\1/p'

编辑:你总是要问自己:“谁扩张呢?”

要发送与期望这些命令,尝试

send "sed -n -e '/^MemTotal/s/^\[^0-9\]*//p' /proc/meminfo\n"

# also removes kb suffix
send "sed -n -e '/^MemTotal/{s/^\[^0-9\]*//;s/ .*//p}' /proc/meminfo\n"

# displays in megabytes
send "free -m | sed -n -e '/^Mem:/{s/^\[^0-9\]*//;s/ .*//p}'\n"

这从逃脱expect它本来的进程和预期的东西sed

这里是你原来的(正确转义)版本。

send "top -n 1 | grep Mem: | awk '{ print \$(NF-7) }' | cut -d 'k' -f1\n"


Answer 2:

Expect是一个Tcl扩展。 TCL将替代$variables在双引号中的字符串(参见教程章 )

你想用括号来发送文本字符串:

send {top -n 1 | grep Mem: | awk '{ print $(NF-7) }' | cut -d 'k' -f1}
send "\r"


文章来源: Get Total Memory of a host with LINUX/EXPECT