Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何将unix top命令输出正确保存到变量中?_Linux_Bash_Shell_Unix_Top Command - Fatal编程技术网

Linux 如何将unix top命令输出正确保存到变量中?

Linux 如何将unix top命令输出正确保存到变量中?,linux,bash,shell,unix,top-command,Linux,Bash,Shell,Unix,Top Command,我必须将top命令的输出保存到一个变量中,并执行以下操作: myvar=`top -b -n1 | head -n 18` 问题是它似乎忽略了返回字符,因此当我回显$myvar的内容时,我看到如下内容: top-15:15:38最多745天,15:08,5个用户,平均负载:0.22,0.27,0.32个任务:共133个,1个正在运行,132个睡眠,0个停止,0个僵尸Cpu:6.4%的用户,1.6%的sy,0.0%的ni,91.7%的id,0.3%的wa,0.0%的hi,0.0%的si内存:20

我必须将top命令的输出保存到一个变量中,并执行以下操作:

myvar=`top -b -n1 | head -n 18`
问题是它似乎忽略了返回字符,因此当我回显
$myvar
的内容时,我看到如下内容:

top-15:15:38最多745天,15:08,5个用户,平均负载:0.22,0.27,0.32个任务:共133个,1个正在运行,132个睡眠,0个停止,0个僵尸Cpu:6.4%的用户,1.6%的sy,0.0%的ni,91.7%的id,0.3%的wa,0.0%的hi,0.0%的si内存:2074716k总数,2038716k使用,36000k空闲,84668k缓冲区交换:41924K总数,107268k使用,40856K等。


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

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

注意区别:

#! /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 sleeping, 0 stopped, 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 total, 3644624k used, 282160k free, 232696k buffers Swap: 9936160k total, 101156k used, 9835004k free, 1287352k cached -------------------- 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 sleeping, 0 stopped, 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 total, 3644624k used, 282160k free, 232696k buffers Swap: 9936160k total, 101156k used, 9835004k free, 1287352k cached top-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已用,缓存3500K,未缓存128734K -------------------- 顶部-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的参数处理中被磨碎。

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

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

将在每行之后输出自定义的\u行\u标记。虽然上面的答案可能是更好的方法。

是否将其保存为bash数组?您是否需要特定的数据?写tmp文件不是更容易吗?@gbacon谢谢,它就像你说的那样工作得很好!我得到了它!感谢大家的阅读和评论。