2012-03-29 241 views
1

在以下命令我得到alert.txt的特殊字符前output.How我可以阻止它....top命令特殊字符

#!/bin/sh 
topsnapshot=`top -n 5` 
    echo -e "\n\n===========================TOP COMMAND SNAPSHOT====================================================" > /tmp/alert.txt 
echo "$topsnapshot" >> /tmp/alert.txt 

輸出:

===========================TOP COMMAND SNAPSHOT==================================================== 
    ^[[H^[[2J^[(B^[[mtop - 18:56:01 up 112 days, 18:22, 5 users, load average: 0.99, 0.73, 0.33^[(B^[[m^[[39;49m^[[K 
    Tasks:^[(B^[[m^[[39;49m^[(B^[[m 142 ^[(B^[[m^[[39;49mtotal,^[(B^[[m^[[39;49m^[(B^[[m 2 ^[(B^[[m^[[39;49mrunning,^[(B^[[m^[[39;49m^[(B^[[m 139 ^[(B^[[m^[[39;49msleeping,^[(B^[[m^[[39;49m^[(B^[[m 0 ^[(B^[[m^[[39;49mstopped,^[(B^[[m^[[39;49m^[(B^[[m 1 ^[(B^[[m^[[39;49mzombie^[(B^[[m^[[39;49m^[[K 
    Cpu(s):^[(B^[[m^[[39;49m^[(B^[[m 0.2%^[(B^[[m^[[39;49mus,^[(B^[[m^[[39;49m^[(B^[[m 0.2%^[(B^[[m^[[39;49msy,^[(B^[[m^[[39;49m^[(B^[[m 0.0%^[(B^[[m^[[39;49mni,^[(B^[[m^[[39;49m^[(B^[[m 99.1%^[(B^[[m^[[39;49mid,^[(B^[[m^[[39;49m^[(B^[[m 0.4%^[(B^[[m^[[39;49mwa,^[(B^[[m^[[39;49m^[(B^[[m 0.0%^[(B^[[m^[[39;49mhi,^[(B^[[m^[[39;49m^[(B^[[m 0.0%^[(B^[[m^[[39;49msi,^[(B^[[m^[[39;49m^[(B^[[m 0.0%^[(B^[[m^[[39;49mst^[(B^[[m^[[39;49m^[[K 
    Mem: ^[(B^[[m^[[39;49m^[(B^[[m 4142428k ^[(B^[[m^[[39;49mtotal,^[(B^[[m^[[39;49m^[(B^[[m 2291280k ^[(B^[[m^[[39;49mused,^[(B^[[m^[[39;49m^[(B^[[m 1851148k ^[(B^[[m^[[39;49mfree,^[(B^[[m^[[39;49m^[(B^[[m 569928k ^[(B^[[m^[[39;49mbuffers^[(B^[[m^[[39;49m^[[K 
    Swap:^[(B^[[m^[[39;49m^[(B^[[m 5668856k ^[(B^[[m^[[39;49mtotal,^[(B^[[m^[[39;49m^[(B^[[m  76k ^[(B^[[m^[[39;49mused,^[(B^[[m^[[39;49m^[(B^[[m 5668780k ^[(B^[[m^[[39;49mfree,^[(B^[[m^[[39;49m^[(B^[[m 1088948k ^[(B^[[m^[[39;49mcached^[(B^[[m^[[39;49m^[[K 
    ^[[6;1H 
    ^[[7m PID USER  PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND                         ^[(B^[[m^[[39;49m^[[K 
    ^[(B^[[m^[(B^[[m31832 root  25 0 6072 2100 1228 R 99.2 0.1 6:40.14 t.py                          ^[(B^[[m^[[39;49m 
    ^[(B^[[m 1 root  15 0 2160 644 556 S 0.0 0.0 0:17.83 init 
+0

$頂部-n 1 -B |頭> /tmp/alert.txt – lancha90 2014-01-21 11:28:45

回答

2

嘗試:

topsnapshot=`top -b -n 5` 
+0

-b輸出靠前指揮5倍,我不希望出現這種情況 – Rajeev 2012-03-29 14:31:46

+2

所以*你*你想要什麼?你想在五秒鐘後讀一讀嗎?還是隻讀一讀?沒有-b,你實際上只能獲得五次讀數中的最後一次。 – 2012-03-29 14:51:13

+0

然後更改選項。 – tripleee 2012-03-29 14:56:01

1

這對我的作品在Linux上:

topsnapshot=$(TERM=dumb top -n 5) 

的啞終端沒有轉義序列。

+0

雖然輸出中沒有格式化和只有一個輸出頂部在output.Thsi結果5次命令重複-n 5 – Rajeev 2012-03-29 14:50:24

+2

你怎麼確定它是不是格式化?如果我這樣做:'echo「$ topsnapshot」',我得到整齊格式的數據。如果我這樣做:'echo $ topsnapshot',然後我得到一團糟。這是可以預料的;否則它的外殼會變得行爲不端。 – 2012-03-29 14:52:07

+0

另外,'-n 5'選項表示「產生5個批次的輸出」。如果你只想要一個,那麼使用'top -n 1'。 '-n 5'直接來自你的問題。當去直接篩選,花哨的格式化字符(終端控制字符)意味着你只能看到一個大量輸出的時間,但'top'程序生成5個屏幕十足。 – 2012-03-29 17:10:15

0

您已在您的意見,你不希望它重複5次,但在你的例子命令使用-n 5其他的答案。 -n 5告訴top重複5次。因此,嘗試以下操作來得到它只有一次重複:

topsnapshot=$(top -b -n 1) 

如果你只是想輸出的前幾行,用head

topsnapshot=$(top -b -n 1 | head -n 25) 

要打印捕獲的輸出,我提出以下建議:

printf '%s\n' "${topsnapshot}" 

一定要記住${topsnapshot}左右的雙引號。我不使用echo,因爲它取決於shell的實現,它是may or may not treat backslashes specially