Stdout从管道与睡眠

时间:2018-06-18 20:27:18

标签: bash

我想将turbostat的输出捕获到变量中。默认情况下,turbostat将每隔5秒运行一次,因此该人建议在最后添加睡眠1以捕获单个镜头。但是,当我这样做时,我似乎无法管道结果加上它将输出写入控制台,除非我将所有内容都为空。

如何捕获输出?

我厌倦了但无济于事。

CPUPower=$((turbostat --quiet --show PkgWatt --cpu package sleep 1 | pcregrep -o1 "PkgWatt[\r\n]+([^\r\n]+)") > /dev/null 2>&1)

1 个答案:

答案 0 :(得分:0)

根据man page,当turbostat有一个要运行的命令时,它会将自己的输出发送到stderr,而不是stdout。这可能是因为统计数据可以与命令的输出区分开来。

因此,您需要将stderr重定向到stdout才能使用pcregrep进行处理。您使用pcregrep本身的输出执行此操作,而不是turbostat的输出。

CPUPower=$(turbostat --quiet --show PkgWatt --cpu package sleep 1 2>&1 | pcregrep -o1 "PkgWatt[\r\n]+([^\r\n]+)")