我已经建立了这个管道:
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
答案 0 :(得分:3)
尝试让watch
调用shell:
watch sh -c 'echo "scale=2;$(awk '/wchar/ {print $2}' io)/(1024^3)" | bc'
这类似于调用脚本但不需要单独的文件。
答案 1 :(得分:3)
问题是关于awk的单引号,你可以通过转义单引号来修复它。
watch 'echo "scale=2;$(cat io | grep wchar | awk '"'"'{print $2}'"'"')/(1024^3)" | bc'
关于如何在单引号内转义单引号,有一个很好的解释"BASH, escaping single-quotes inside of single-quoted strings"