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シェルを呼び出してみてください:

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

これは、スクリプトを呼び出すのと似ていますが、別のファイルは必要ありません。

于 2013-05-06T21:55:36.427 に答える