[英]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.