2012-04-23 25 views
1

我想通過使用'.exp'腳本來獲取主機的總內存。獲取LINUX/EXPECT主機的總內存

主機內越來越之後,我執行以下行:

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

在執行該腳本,它返回以下錯誤:

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

但是,如果手動得到主機的內部,執行相同的行(沒有「發送」部分),它返回我預期的號碼...

我在做什麼錯了?任何想法?任何其他方式提出相同的建議?

誠摯的問候和感謝提前,

安東尼

+1

'的/ proc/meminfo'更易於解析。 – Mat 2012-04-23 09:00:12

回答

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" 
+0

嗨,感謝您的回覆,但這不符合我的情況,在您的第一個解決方案中,它返回的內存大小爲字母'kB,然後在末尾添加......「| cut -d'k' - f1「返回我想要的,也是你的第二個解決方案在我想知道總內存的主機中正確返回數字......但是當我在'.exp'腳本中引入它時,它返回以下錯誤:」invalid命令名稱「^ 0-9」在這兩種情況下... – Antonio 2012-04-23 09:43:26

+0

@Antonio:我懷疑你有引用問題(這肯定是你原來的問題)。 – Sorpigal 2012-04-23 10:59:05

2

期望是一個Tcl擴展。 TCL將在雙引號的字符串替換$variables(見tutorial chapter

你想使用大括號來發送文本字符串:

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