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

发布于 2024-08-19 10:11:31 字数 477 浏览 7 评论 0原文

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

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

问题是它似乎忽略了返回字符,因此当我回显 $myvar 的内容时,我看到这样的内容:

top - 15:15:38 up 745 days, 15:08, 5 users, loadaverage: 0.22, 0.27, 0.32 Tasks: 总共 133 个,1 个正在运行,132 个正在睡眠,0 个停止,0 个僵尸 Cpu (s):6.4% us、1.6%sy、0.0% ni、91.7% id、0.3% wa、0.0% hi、0.0% si 内存:总计 2074716k、已用 2038716k、可用 36000k、84668k 缓冲区 交换:总计 4192924k、107268k使用过,4085656k 等...

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

I've got to save the output of the top command into a variable and I do this:

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

The problem is that it seems to be ignoring the return characters, so when I echo the content of $myvar I see something like:

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...

How can I save all top data correctly?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

我一直都在从未离去 2024-08-26 10:11:31

请注意差异:

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

如果没有引号,变量的内容将在 shell 的参数处理中进行处理。

Notice the difference:

#! /bin/bash

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

Output:

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

Without the quotes, the contents of the variable are ground up in the shell's argument processing.

花期渐远 2024-08-26 10:11:31

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

If you are looking for a particular piece of info within the top output i'd be inclined to filter the top output for what you're looking for before storing it rather than capture everything and then extract what you need.

ヅ她的身影、若隐若现 2024-08-26 10:11:31

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

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

将在每行之后输出 CUSTOM_LINE_MARKER 。尽管罗布·威尔斯上面的回答可能是更好的方法。

You could pipe it out through sed to catch and transform the line breaks, e.g.

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

will output the CUSTOM_LINE_MARKER after every line. though Rob Wells answer above is probably a better approach.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文