watchコマンドとは

watchコマンドは指定したコマンドを一定間隔で実行し、結果を表示するコマンド。

実行するコマンドはwatchコマンドの引数に指定する。

$ watch コマンド

例えば以下のコマンドで、現在のフォルダでlsを実行した結果を監視できる。

$ watch ls

watchコマンド

同一画面を書き換えて表示されるので結果が流れていかないのが便利。

macでwatchコマンドを使う方法

Macではwatchコマンドが標準でインストールされていない。
Macで利用するにはHomebrewを利用してインストールする必要がある。

$ brew install watch

watchコマンドの主なオプション

watchコマンドでよく使うオプションは以下の通り。

オプション長いオプション説明
-n–interval実行間隔を指定する。単位は秒。
-d–differences前回の実行結果と比べて変更があった場合、その部分を強調表示する。
-t–no-titlewatchコマンド自体がタイトルバーに表示されるのを抑制する。

-n オプション: 実行間隔の指定

-n(--interval)オプションは実行間隔を秒単位で指定できる。
例えば以下のコマンドで10秒ごとにlsコマンドを実行し、結果を表示する。

$ watch -n 10 ls

結果が変化するまでに時間のかかることが想定されている場合、頻繁に実行したくないコマンドを実行する際には便利なオプションとなる。

指定できる秒数は0.1が最小。
0.1よりも小さな値を指定した場合は0.1として認識される。

-d オプション: 変更がある箇所をハイライトする

-d(--differences)オプションは前回の実行結果から変化のある箇所を反転させて強調表示してくれる。
例えば以下のように実行する。

$ watch -d ls

以下のように変更のある箇所がハイライト表示される。

watch -d オプション

2.txtを削除して3.txtを作成しているので、2の箇所が3に変わり3がハイライトされている。

-t オプション: タイトルの省略

-t | --no-titleオプションを指定すると、1行目のタイトル表示が省略される。

watchコマンドのタイトル行

例えば以下のように-tを指定するとコマンドの結果だけが表示される。

$ watch -t ls

watch -t オプション指定時

パイプを含むコマンドを使いたい場合

パイプを含むコマンドを監視する場合、実行するコマンド部分をダブルクオートもしくはシングルクオートで囲う。

例えば、lsコマンドの結果の行数を監視したい場合は以下のようにls | wc -lをダブルクオートで囲う。

$ watch "ls | wc -l"

もしダブルクオートで囲わない場合は以下のコマンドとなる。

$ watch ls | wc -l

この場合はwatch lsコマンドの結果をwc -lコマンドにpipeする形となるためうまく動作しない。

ワイルドカードを使いたい場合

ワイルドカードを使いたい場合もダブルクオートもしくはシングルクオートで囲う。

$ watch "ls *.txt"

囲わなかった場合、watchコマンドへ渡す前にワイルドカードが展開されてしまう。
そのため新規に追加されたファイルが表示されなかったり、削除されたファイルを見ようとしてエラーになったりするため 意図通りに動作しない。