![パイプされたコマンド/プログラムのチェーンで watch コマンドを使用する方法](https://rvso.com/image/97221/%E3%83%91%E3%82%A4%E3%83%97%E3%81%95%E3%82%8C%E3%81%9F%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%2F%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%81%AE%E3%83%81%E3%82%A7%E3%83%BC%E3%83%B3%E3%81%A7%20watch%20%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95.png)
私は通常、Linux ユーティリティを使用して、次のように数秒watch
ごとに繰り返しコマンドの出力を監視します。n
watch 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 "!!"