bash脚本输出未更新

时间:2014-01-23 10:14:17

标签: bash shell scripting

我正在读取我的机器cpu load,但结果没有更新,第一个结果会不断显示。

#!/bin/bash
LOAD=$(ps aux|awk 'NR > 0 { s +=$3 }; END {print s"%"}')
(while true; do
echo "$LOAD"
sleep 1
done)

返回

0.3%
0.3%
0.3%
0.3%
0.3%

即使负载在此期间发生了变化

2 个答案:

答案 0 :(得分:3)

您只计算一次LOAD值,然后永远打印该值。相反,您必须计算while循环内的值:

#!/bin/bash

while true; do
   LOAD=$(ps aux|awk 'NR > 0 { s +=$3 }; END {print s"%"}')
   echo "$LOAD"
   sleep 1
done

测试

$ ./a
81.2%
81.2%
81.1%

答案 1 :(得分:2)

这是因为变量LOAD仅被评估一次。

您可以将其转换为函数:

LOAD() { ps aux|awk 'NR > 0 { s +=$3 }; END {print s"%"}'; }
while true; do
  LOAD
  sleep 1
done