4

我必须将 top 命令的输出保存到一个变量中,我这样做:

myvar=`top -b -n1 | head -n 18`

问题是它似乎忽略了返回字符,所以当我回显的内容时,$myvar我看到如下内容:

top - 15:15:38 up 745 days, 15:08, 5 users, load average: 0.22, 0.27, 0.32 Tasks: 133 total, 1 running, 132 sleeping, 0 stopped, 0 zombie Cpu(s): 6.4% us, 1.6%sy, 0.0% ni, 91.7% id, 0.3% wa, 0.0% hi, 0.0% si Mem: 2074716k total, 2038716k used, 36000k free, 84668k buffers Swap: 4192924k total, 107268k used, 4085656k etc...

如何正确保存所有顶级数据?

4

3 回答 3

16

注意区别:

#! /bin/bash

x=`top -b -n 1 | head -n 5`
echo $x
echo --------------------
echo "$x"

输出:

top - 14:33:09 up 7 days, 5:58, 4 users, load average: 0.00, 0.00, 0.09 Tasks: 253 total, 2 running, 251 sleep, 0 stops, 0 zombie Cpu(s): 1.6%us , 0.4%sy, 70.3%ni, 27.6%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 总共 3926784k, 3644624k, 282160k free, 232696k buffers Swap: 9936160k total, 101156k used, 9835免费,缓存 1287352k
--------------------
顶部 - 14:33:09 上升 7 天,5:58,4 个用户,平均负载:0.00、0.00、0.09
任务:共 253 个,运行 2 个,睡眠 251 个,停止 0 个,僵尸 0 个
CPU:1.6%us、0.4%sy、70.3%ni、27.6%id、0.0%wa、0.0%hi、0.0%si、0.0%st
内存:总计 3926784k,已使用 3644624k,空闲 282160k,232696k 缓冲区
交换:总计 9936160k,已使用 101156k,免费 9835004k,缓存 1287352k

没有引号,变量的内容在 shell 的参数处理中是基础的。

于 2010-01-26T20:33:35.857 回答
1

如果您在顶部输出中寻找特定的信息,我倾向于在存储之前过滤顶部输出以获得您正在寻找的内容,而不是捕获所有内容然后提取您需要的内容。

于 2010-01-26T20:31:02.107 回答
-1

您可以通过 sed 将其输出以捕获和转换换行符,例如

top -n1 | sed 's/\(.*\)$/\1__CUSTOM_LINE_MARKER/g'

将在每一行之后输出 CUSTOM_LINE_MARKER。尽管上面的 Rob Wells 回答可能是一种更好的方法。

于 2010-01-26T20:35:57.010 回答