watch コマンド 2016/04/15
コマンドを一定の時間ごとに実行して結果を端末にスクロールさせずに固定で表示してくれるコマンド。
例
## `ls -al` を1秒ごとに実行
$ watch -n 1 ls -al
-n1
のようにつなげてもよい。-n0.1
で0.1秒ごとに実行になる。
0.1秒よりも細かい精度では指定できない気がする。
オプション 2016/04/15
-c
- 色表示に対応してくれる。
-d
- 変化した部分を強調して表示される。
-e
- コマンドがエラー終了したらそれ以降はコマンドを実行しない
-g
- コマンドの出力に変化があったら
watch
を終了する -n
<秒数>- 実行間隔を指定する。
n
と数字の間はスペースがなくてもよい。 -t
- 普通は1行目に
watch
の情報として実行間隔や実行しているコマンドを表示しているが、 このオプションを付けると、非表示になる。
-c
, -e
, -g
は環境によって使える場合と使えない場合があるようで、手元の Ubuntu 14.04 では使えたが CentOS 6.3 では使えなかった。
バージョンによる違い 2016/04/15
このコマンドを提供しているプロジェクトがもともとは procps というところで、それをforkしたものが procps-ng。 CentOS 6では本家 procps を使っていて、Ubuntu や CentOS 7 では procps-ng を使っている。
たぶん、-e
や -g
は procps-ng になってからのオプション。
コマンドの中にワイルドカードを使いたい場合 2016/02/05
バッチ処理かなにかで .txt
という拡張子を持つファイルが作られたり消されたりするとして、その様子をリアルタイムに監視するために
ls -al *.txt
というコマンドを常時表示させたいとする。そのとき、
$ watch -n1 ls -al *.txt
と書いてしまうと、watchコマンドを開始する前に *.txt
の展開をして、
watchコマンドからは毎秒同じ展開結果でlsコマンドを実行してしまい、意図した結果にならない。
以下のようにコマンド全体をクオーテーションなどで囲むとよい。
$ watch -n1 "ls -al *.txt"
パイプが含まれている場合 2014/05/23
実行したいコマンドにパイプが含まれている場合、そのまま watch
の後ろに書くと watch
コマンド自体の出力をパイプしてしまうので、以下のように実行コマンド全体をダブルクオーテーションなどで囲む。
## ファイルの数を3秒ごとに監視
$ watch -n 3 "ls | wc -l"
コマンドの出力に色をつけるには 2016/04/15
実行するコマンドがカラーで表示しようとする場合でも、watchコマンドはデフォルトではカラー表示してくれない。
$ watch -n1 ls -al --color
これを実行するとエスケープシーケンスがあらわに表示されて残念な感じになる。
こういうときUbuntuやCentOS 7では -c
オプションが使える。
$ watch -n1 -c ls -al --color