2012-03-29 7 views
1

Im folgenden Befehl i Sonderzeichen in alert.txt für die Top-output.How bekommen kann ich es verhindern ....Top Befehl Sonderzeichen im Shell-Skript

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

Ausgang:

===========================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

$ top -n 1 -b | head> /tmp/alert.txt – lancha90

Antwort

2

Versuchen:

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

-b gibt den oberen Befehl aus 5 mal ich will das nicht – Rajeev

+2

Also was * willst * du? Willst du * eins * nach fünf Sekunden lesen oder nur eine Lesung? Ohne das -b erhältst du tatsächlich nur die letzte von fünf Lesungen. –

+0

Dann ändern Sie die Optionen. – tripleee

1

Dies funktioniert für mich auf Linux:

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

Das dumme Terminal hat keine Escape-Sequenzen.

+0

Obwohl output nicht formatiert ist und der Befehl für 5 mal in der Ausgabe wiederholt wird. Thsi führt zu nur einer Ausgabe top-n 5 – Rajeev

+2

Wie haben Sie festgestellt, dass es nicht formatiert wurde? Wenn ich: "echo" $ topsnapshot "', bekomme ich ordentlich formatierte Daten. Wenn ich: echo $ topsnapshot, dann bekomme ich ein Durcheinander. Dies ist zu erwarten; die Hülle würde sich schlecht benehmen, wäre es anders. –

+0

Die "-n 5" Option sagt auch "produzieren 5 Lose der Ausgabe". Wenn Sie nur eine möchten, verwenden Sie 'top -n 1'. Das '-n 5' kommt direkt von deiner Frage. Wenn Sie direkt zum Bildschirm gehen, bedeutet die Formatierung der Formatierung (Terminal-Steuerzeichen), dass Sie nur eine Menge der Ausgabe gleichzeitig sehen, aber das "Top" -Programm generiert 5 Bildschirme voll. –

0

Sie haben in Ihren Kommentaren zu anderen Antworten behauptet, dass Sie es nicht fünf Mal wiederholen möchten, aber in Ihrem Beispielbefehl verwenden Sie -n 5. Die -n 5 sagt top, um 5 mal zu wiederholen. Also versuchen Sie Folgendes, um es nur einmal zu wiederholen:

topsnapshot=$(top -b -n 1) 

Wenn Sie nur die ersten paar Zeilen der Ausgabe möchten, verwenden Sie head:

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

das aufgenommene Ausgabe zu drucken, empfehle ich die folgende :

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

unbedingt die doppelten Anführungszeichen um ${topsnapshot} zu erinnern. Ich verwende echo nicht, weil es may or may not treat backslashes specially abhängig von der Implementierung der Shell ist.