2012-03-29 2 views
1

В следующей команды я получаю специальные символы в alert.txt для верхней output.How может предотвратить его ....Лучшие команды специальные символы в сценарии оболочки

#!/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

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

ответ

2

Try:

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

-b выводит верхнюю команду 5 раз, я не хочу этого – Rajeev

+2

Итак, что * * * вы хотите? Вы хотите * одно * чтение через пять секунд или только одно чтение? Без -b вы фактически получаете только последнее из пяти показаний. –

+0

Затем измените параметры. – tripleee

1

Это работает для меня на Linux:

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

Глубокий терминал не имеет управляющих последовательностей.

+0

Хотя ouput не отформатирован, и команда повторяет 5 раз в output.Thsi приводит только к одной вершине вывода -n 5 – Rajeev

+2

Как вы определили, что он не был отформатирован? Если я это сделаю: 'echo '$ topsnapshot" ', я получаю аккуратно отформатированные данные. Если я это сделаю: 'echo $ topsnapshot', тогда я получаю беспорядок. Это следует ожидать; в противном случае оболочка будет плохо себя вести. –

+0

Кроме того, опция '-n 5' говорит:« Произведите 5 партий вывода ». Если вы хотите только один, используйте «top -n 1». «-n 5» приходит прямо из вашего вопроса. При переходе непосредственно на экран, причудливые символы форматирования (символы управления терминалом) означают, что вы видите только одну партию вывода за раз, но программа 'top' генерирует 5 экранов. –

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, потому что он may or may not treat backslashes specially в зависимости от реализации оболочки.