パイプされたコマンド/プログラムのチェーンで watch コマンドを使用する方法

パイプされたコマンド/プログラムのチェーンで watch コマンドを使用する方法

私は通常、Linux ユーティリティを使用して、次のように数秒watchごとに繰り返しコマンドの出力を監視します。nwatch df -h /some_volume/

watchしかし、次のような一連のパイプコマンドでは使用できないようです:

$ watch ls -ltr|tail -n 1

これを実行すると、watch実際に監視され、出力は何も出力されないものls -ltrに渡されます。tail -n 1

これを試すと:

$ watch (ls -ltr|tail -n 1)

私は

$ watch: syntax error near unexpected token `ls'

また、次のいずれかが何らかの理由で失敗します。

$ watch <(ls -ltr|tail -n 1)

$ watch < <(ls -ltr|tail -n 1)

$ watch $(ls -ltr|tail -n 1)

$ watch `ls -ltr|tail -n 1)`

そして最後に、次のようにします。

$ watch echo $(ls -ltr|tail -n 1)

内部のコマンドは$()1 回だけ実行され、結果の出力文字列は常にリテラルとして印刷 (「監視」) されるため、指定された間隔で出力に変化は見られません。

watchでは、コマンドをパイプされたコマンド チェーンで動作させるにはどうすればよいでしょうか(スクリプト内に配置する以外)?

答え1

watch 'command | othertool | yet-another-tool'

答え2

watch -n 1 "ls -lrt | tail -n20; date"

パイプを鳴らして一列に並んで走ってみましょう。

答え3

'一重引用符 ( ) と二重引用符 ( )を組み合わせて使用​​します"。例:

watch -n 1 "links -dump 127.0.0.1/server-status | grep -e '\S' -Fe 'www.'"

答え4

コマンドを実行してそれを監視したい場合は、次のようにします。

ls -lrt | tail -n20; date
watch "!!"

関連情報