web-dev-qa-db-ja.com

「echo-e」でwatchコマンドを使用する

動的ファイルの行を監視したいので、これにはwatchコマンドを使用します。 test-statusiplist_testの2つのファイルがあります。 iplist_testで何かを制御し、この出力をtest-statusに入力します。 iplist_testファイルには150行あり、14/15025/150などの結果を表示したい。これには次のコマンドを使用します。

watch -n .1 echo -e "$(cat test-status | wc -l)\/$(cat iplist_test | wc -l)"

このコマンドはwatchコマンドのようには機能せず、静的です。ライブ結果のために手動で更新します。私のコマンドの何が問題になっていますか?

1
Gefolge

watchが開始する前に$()がシェルによって解決されるため、出力は静的です。

_''_で引用すると役立つはずです。一重引用符は展開を防ぎます。このようにして、$()は文字通りwatchに渡され、毎回解析されます。

_watch -n .1 'echo -e "$(cat test-status | wc -l)/$(cat iplist_test | wc -l)"'
_

また、catを誤用します。これは、不要なcatプロセスなしで機能するはずです。

_watch -n .1 'echo -e "$(<test-status wc -l)/$(<iplist_test wc -l)"'
_
2