1

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

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

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

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

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

但是如果在主机内部手动获取,并执行同一行(没有“发送”部分),它会返回我预期的数字......

我做错了什么?任何的想法?任何其他方式做同样的建议?

最好的问候和提前感谢,

安东尼奥

4

2 回答 2

3

的输出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"
于 2012-04-23T09:13:12.797 回答
2

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

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

send {top -n 1 | grep Mem: | awk '{ print $(NF-7) }' | cut -d 'k' -f1}
send "\r"
于 2012-04-23T13:31:33.070 回答