【问题标题】:How to correctly save the unix top command output into a variable?如何正确地将 unix top 命令输出保存到变量中?
【发布时间】:2025-12-28 21:15:07
【问题描述】:

我必须将 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...

如何正确保存所有热门数据?

【问题讨论】:

  • 您想将其保存为 bash 数组吗?您需要特定的数据吗?写入 tmp 文件不是更容易吗?

标签: linux bash shell unix top-command


【解决方案1】:

注意区别:

#! /bin/bash

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

输出:

顶部 - 7 天 14:33:09,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 Mem:总共 3926784k,已使用 3644624k,282160k 空闲,232696k 缓冲区交换:总共 9936160k,101156k已使用,9835004k 免费,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 的参数处理中是基础的。

【讨论】:

  • @gbacon 谢谢,就像你说的那样工作得很好!我得到了它!感谢大家的阅读和评论。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】: