我正在尝试通过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
您需要在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
的值。
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秒(取决于每次迭代设置的延迟)