【问题标题】:Get Total Memory of a host with LINUX/EXPECT使用 LINUX/EXPECT 获取主机的总内存
【发布时间】:2012-05-03 21:14:33
【问题描述】:

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

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

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

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

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

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

我做错了什么?任何想法?有其他方法可以做同样的事情吗?

提前致以最诚挚的问候和感谢,

安东尼奥

【问题讨论】:

  • /proc/meminfo 更容易解析。

标签: linux bash memory-management expect


【解决方案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"

【讨论】:

  • 您好,感谢您的回复,但它并不完全适合我的情况,您的第一个解决方案是返回带有字母 kB 的内存大小,然后在末尾添加 ..." | cut -d 'k' -f1" 返回我想要的内容,您的第二个解决方案也在我想知道总内存的主机中正确返回数字......但是当我在我的'.exp'脚本中引入它时它返回我出现以下错误:两种情况下都出现“无效的命令名”^0-9”...
  • @Antonio:我怀疑你有引用问题(这肯定是你原来的问题)。
【解决方案2】:

Expect 是一个 Tcl 扩展。 Tcl 将在双引号字符串中替换$variables(参见tutorial chapter

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

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

【讨论】:

    猜你喜欢
    • 2017-11-20
    • 1970-01-01
    • 2013-09-04
    • 2015-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-01
    • 2014-08-02
    相关资源
    最近更新 更多