4

我已经建立了这个管道:

echo "scale=2;$(cat io | grep wchar | awk '{print $2}')/(1024^3)" | bc

现在我正在努力watch。我对 Bash 的了解非常特别,所以我没有成功。尝试过类似的事情:

watch echo "scale=2;$(cat io | grep wchar | awk '{print $2}')/(1024^3)" | bc # I understand why this fails

watch 'echo "scale=2;$(cat io | grep wchar | awk '{print $2}')/(1024^3)" | bc' # Not enough bash understanding to understand why this fails

我究竟做错了什么?

编辑

样本输出cat io

rchar: 36713294562
wchar: 36788363400
syscr: 27050
syscw: 2314540
read_bytes: 36709928960
write_bytes: 0
cancelled_write_bytes: 0
4

2 回答 2

4

问题是关于 awk 的单引号,您可以通过转义单引号来解决它。

watch 'echo "scale=2;$(cat io | grep wchar | awk '"'"'{print $2}'"'"')/(1024^3)" | bc'

这都是关于如何在单引号内转义单引号,有一个很好的解释“BASH,在单引号字符串中转义单引号”

于 2013-05-06T22:13:38.893 回答
3

尝试watch调用 shell:

watch sh -c 'echo "scale=2;$(awk '/wchar/ {print $2}' io)/(1024^3)" | bc'

这类似于让它调用脚本但不需要单独的文件。

于 2013-05-06T21:55:36.427 回答