Shell脚本中的顶部命令

问题描述 投票:1回答:2

我正在尝试通过Expect脚本获得top命令的前5行。我从外壳程序脚本中调用了这个期望脚本以及其他一些内容。

[top | head -5给我下面的输出,即没有cpu stats-

top-09:10:58最多46天,17:03、12个用户,平均负载:0.01、0.02, 0.00个任务:共138个,正在运行1个,正在休眠137个,已停止0个,丧尸0个

Mem:总计16432400k,已使用8408096k,免费8024304k,609200k 缓冲区交换:总计6290736k,已使用0k,免费6290736k, 6754356k已缓存

如果我仅在该远程服务器上运行top命令,我会看到在更新CPU状态行之前有2-3秒的延迟,请问有人可以帮助我获取所有5条更新了CPU状态的行吗?以下是我的期望脚本-

#!/usr/bin/expect -f
set user1 abc
set pass1 pass
set timeout 8
match_max 1000
spawn ssh -C -o stricthostkeychecking=no $user1@<ip>
expect "*?assword:*"
send  "$pass3\r"
expect "?xterm*"
send "\r"
send "top | head -5\r"
expect eof
linux shell expect
2个回答
6
投票

您需要在top中运行batch mode,而不是默认的interactive mode。另外,您需要定义top执行的迭代次数以获取其测量值。

num_iterations=3
top -b -n $num_iterations | head -5

如果您希望输出仅列出前5个进程并跳过显示的统计信息标题,则可以尝试以下操作:

num_iterations=3
top -b -n $num_iterations | sed -n '8,12p'

也可以根据需要调整num_iterations的值。


0
投票
top -b -n 2 -u $(whoami) | grep -A6 -B5 PID |tail -12

根据要求调整以下值。

grep -A $ after_lines_count -B $ before_lines_count

tail-$($ after + $ before + 1)

尾值应为[行数之前+行数之后+ 1(PID匹配行)]

如果您不想要特定于用户的详细信息。

  top -b -n 2 | grep -A6 -B5 PID |tail -12

注意:top的迭代次数为2(top -n 2),即显示输出需要6秒(取决于每次迭代设置的延迟)

© www.soinside.com 2019 - 2024. All rights reserved.