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