2012-03-29 1 views
1

....トップコマンドの特殊文字を、私はそれを防ぐことができ、トップoutput.Howためalert.txtとに特殊文字を取得するには、次のコマンドで

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

試してみてください。

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

-bはtopコマンドを5回出力しません – Rajeev

+2

あなたは何をしたいですか? 5秒後に* 1つの*読書をしたいのですか? -bがなければ、実際には5つの読みのうちの最後のものだけが得られます。 –

+0

次に、オプションを変更します。 – tripleee

1

これは、Linux上で私の作品:

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

ダム端末にエスケープシーケンスがありません。

+0

出力はフォーマットされておらず、コマンドは出力で5回繰り返されますが、結果は出力が1つだけになります。-n 5 – Rajeev

+2

どのようにフォーマットされていないと判断しましたか?もし私がしたら: 'echo" $ topsnapshot "'、私はきちんとフォーマットされたデータを取得します。もし私が 'echo $ topsnapshot'を実行すると、混乱します。これは予期されることです。そうでなければ、シェルは誤動作するでしょう。 –

+0

また、 '-n 5'オプションは「5ロットの出力を生成します」と表示します。あなたが1つだけを望むなら、 'top -n 1'を使います。 '-n 5'はあなたの質問から直接得られます。スクリーンに直接行くと、見栄えの良い書式設定文字(ターミナルコントロール文字)は一度に1つのロットのみを表示することを意味しますが、 'top'プログラムは5つのスクリーンをフルに生成します。 –

0

あなたのコメントでは、あなたのコマンドの例では-n 5を使用していますが、5回繰り返さないことを他の回答にしています。 -n 5は、topに5回繰り返すよう指示します。だから、一度だけ繰り返すように取得するには、次の試してください。

topsnapshot=$(top -b -n 1) 

あなただけの出力の最初の数行をしたい場合は、headを使用します。

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

キャプチャ出力を印刷するために、私は次のことをお勧めします:

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

${topsnapshot}を二重引用符で囲んでください。シェルの実装によってはmay or may not treat backslashes speciallyとなるため、私はechoを使用しません。