
私は通常、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 "!!"