2012-03-29 229 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