2013-03-03 69 views
1

我想通過expect腳本獲得前5行的頂級命令。我從一個shell腳本和其他一些東西中調用這個expect腳本。shell腳本中的頂級命令

top | head -5給我下面輸出即沒有CPU stats-

頂部 - 9時10分58秒增長46天,17點03分,12個用戶,平均負載:0.01,0.02,0.00 任務:138總共,1點運行,137睡眠,0停止,0殭屍

號負責:16432400k總,8408096k使用8024304k免費,609200k 緩衝器互換:6290736k總,使用0K,6290736k免費, 6754356k緩存

如果我只在該遠程服務器上運行top命令,我可以看到CPU狀態行更新前有2-3秒的延遲,有人可以幫助我獲得更新的cpu狀態的全部5行嗎?下面是我期待的腳本 -

#!/usr/bin/expect -f 
set user1 abc 
set pass1 pass 
set timeout 8 
match_max 1000 
spawn ssh -C -o stricthostkeychecking=no [email protected]<ip> 
expect "*?assword:*" 
send "$pass3\r" 
expect "?xterm*" 
send "\r" 
send "top | head -5\r" 
expect eof 

回答

6

您需要在batch mode而不是默認的interactive mode運行top。另外,您需要定義top執行測量的迭代次數。

num_iterations=3 
top -b -n $num_iterations | head -5 

如果你想輸出只列出前5流程和跳過統計顯示標題,你可以試試這個:

num_iterations=3 
top -b -n $num_iterations | sed -n '8,12p' 

而且調num_iterations值根據自己的需要。

+0

是的,這是正確的。您可以根據您的應用程序需要調整num_iterations的值。 – Tuxdude 2013-03-04 02:50:48

+0

您的意思是在期望腳本中,我需要添加set num_iterations 3,併發送「top -b -n $ num_iterations | head -5」?如果是這樣,我得到相同的輸出沒有CPU統計數據,只是一個教導,我們可以怎麼指定等待x秒前輸出管道到頭部命令? – 2013-03-04 02:52:50

+0

您是否只需要輸出前5個過程?我發現用'head -12'替換'head -5'列出了前5個進程。如果您想跳過標題並獲取前5個進程的信息,則可以執行'top -b -n 3 | sed -n'8,12p''。 sed命令在輸出中選擇第8-12行。 – Tuxdude 2013-03-04 05:56:37