繁体   English   中英

使用LINUX / EXPECT获取主机的总内存

[英]Get Total Memory of a host with LINUX/EXPECT

我想通过使用“ .exp”脚本来获取主机的总内存。

进入主机后,执行以下行:

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

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

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

但是,如果手动进入主机并执行同一行(不包含“发送”部分),它将返回我预期的数字...

我做错了什么? 任何想法? 有其他建议可以这样做吗?

最好的问候,并在此先感谢,

安东尼奥

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"

这避免了原本希望用于sed expect事项。

这是原始版本的(正确转义)版本。

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

Expect是一个Tcl扩展。 Tcl将用双引号字符串替换$variables (请参阅教程章节

您想使用花括号发送文字字符串:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM