2010-01-26 203 views
4

我必須top命令的輸出保存到一個變量,我這樣做:如何正確地將unix top命令輸出保存到一個變量中?

myvar=`top -b -n1 | head -n 18` 

的問題是,它似乎被忽略返回字符,所以當我呼應$myvar內容我看到的是這樣的:

top - 15:15:38 up 745 days, 15:08, 5 users, load average: 0.22, 0.27, 0.32 Tasks: 133 total, 1 running, 132 sleeping, 0 stopped, 0 zombie Cpu(s): 6.4% us, 1.6%sy, 0.0% ni, 91.7% id, 0.3% wa, 0.0% hi, 0.0% si Mem: 2074716k total, 2038716k used, 36000k free, 84668k buffers Swap: 4192924k total, 107268k used, 4085656k etc...

我怎樣才能正確地保存所有數據最高?

+0

是否要將其保存爲bash數組?是否有您需要的特定數據?並且寫入tmp文件不是更容易嗎? – 2010-01-26 20:26:55

回答

16

發現其中的差別:

#! /bin/bash 

x=`top -b -n 1 | head -n 5` 
echo $x 
echo -------------------- 
echo "$x" 

輸出:

top - 14:33:09 up 7 days, 5:58, 4 users, load average: 0.00, 0.00, 0.09 Tasks: 253 total, 2 running, 251 sleeping, 0 stopped, 0 zombie Cpu(s): 1.6%us, 0.4%sy, 70.3%ni, 27.6%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 3926784k total, 3644624k used, 282160k free, 232696k buffers Swap: 9936160k total, 101156k used, 9835004k free, 1287352k cached 
-------------------- 
top - 14:33:09 up 7 days, 5:58, 4 users, load average: 0.00, 0.00, 0.09 
Tasks: 253 total, 2 running, 251 sleeping, 0 stopped, 0 zombie 
Cpu(s): 1.6%us, 0.4%sy, 70.3%ni, 27.6%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st 
Mem: 3926784k total, 3644624k used, 282160k free, 232696k buffers 
Swap: 9936160k total, 101156k used, 9835004k free, 1287352k cached

不帶引號,變量的內容在shell的參數處理碾碎。

+0

@gbacon謝謝,它工作正常,就像你說的!我知道了! 感謝大家的閱讀和評論。 – Cristian 2010-01-26 20:40:16

+0

不客氣。我很高興它有幫助。 – 2010-01-26 20:41:36

1

如果您正在尋找頂部輸出中的特定信息,我傾向於在存儲它之前過濾頂級輸出以查找所需內容,而不是捕獲所有內容,然後提取所需內容。

-1

您可以通過sed將其輸出以捕捉並變換換行符,例如,

top -n1 | sed 's/\(.*\)$/\1__CUSTOM_LINE_MARKER/g' 

將在每行之後輸出CUSTOM_LINE_MARKER。儘管Rob Wells的回答可能是更好的方法。