# 【Linux】一定間隔でコマンドを繰り返し実行する「watch」
> Linux上でコマンドを繰り返して欲しい時に使用する watch コマンド。たとえば date コマンドを実行してリアルタイムにLinux上の時刻を表示ができます。
- Canonical: https://c-a-p-engineer.github.io/linux-watch/
- Published: 2022-09-07T00:00:00.000Z
- Modified: 2022-09-07T00:00:00.000Z
- Categories: Linux
- Tags: Linux

# 【Linux】コマンドを繰り返してくれる「watch」
Linux上でコマンドを繰り返して欲しい時に使用する `watch`コマンド。
たとえば `date`コマンドを実行してリアルタイムにLinux上の時刻を表示ができます。

## watch の使い方
使い方は簡単で `watch` の後に繰り返したいコマンドを指定するだけです。

```
watch [コマンド]
```

1秒ごとに `date` コマンドを実行する場合はいかのようになります。
`-n` の間隔指定がない場合は2秒間隔で実行します。
```
watch -n 1 date
```

### オプション
* `-t` `watch` コマンドの実行間隔などのヘッダー情報を表示しない
* `-e` エラー時（実行したコマンドがエラーコード0以外で終了したとき）は `watch`コマンドも終了する
* `-b` エラー時にビープ音をならす
* `-d` 直前の実行結果と変化した箇所をハイライトにする
  * `-d=permanent` のオプションで実行すると初回から変化した箇所をハイライトにする
* `-c` 色表示に対応してくれる
* `-g` 実行結果が変化したら `watch` コマンドを終了する
* `-n 秒数` 実行間隔を秒数で指定する（設定できる最小値と最小間隔は0.1秒）
* `-p` 厳密な秒数でコマンドを実行
* `-x` 指定したコマンドを `exec` コマンドで実行する（指定がない場合は `sh -c` で実行）

## 応用

### コマンド中にワイルドカードやパイプを使用する場合
コマンド中にワイルドカードやパイプを使用する場合はダブルクォーテーションでコマンドを囲う必要があります。
```
watch -n1 "ls -al *.txt"
```

### エスケープする
ダブルクォーテーションでコマンドを囲った際にコマンド内でダブルクォーテーションを使用したい際はエスケープをする必要があります。
```
watch -n1 "ls -al \"hoge.txt\""
```

### コマンドに色をつける
`ls` コマンド を色つけする際に `-c` のオプションが必要になります。
```
watch -n1 -c ls -al --color
```

## 参考
* <a href="https://hydrocul.github.io/wiki/commands/watch.html" target="_blank" rel="nofollow noopener">watch コマンド | コマンドの使い方(Linux) | hydroculのメモ</a>
