WATCH(1) General Commands Manual WATCH(1)

# 名称

watch - 周期性地执行程序并全屏显示输出

# 概述

**watch** \[*选项* ...] *命令*

# 描述

**watch** 重复运行 *命令*，显示其输出和错误（前者全屏显示）。这使您可以观察程序输出随时间的变化。默认情况下，*命令* 每 2 秒运行一次，**watch** 将持续运行，直到被中断 (Ctrl-C)。输出的头部包括 *命令* 的开始时间和运行时间，以及它的退出状态码。

# 选项

[**-b**, **--beep**](#b)

如果 *命令* 以非零返回值退出，则发出哔声。

[**-c**, **--color**](#c)

解释 ANSI 颜色和风格序列。

[**-C**, **--no-color**](#C)

不要解释 ANSI 颜色和风格序列。

[**-d**, **--differences**\[=*永久*\]](#d)

高亮显示两次更新之间的变化。如果指定了可选的 *永久* 参数，则 **watch** 将显示自第一次迭代以来的所有变化。*永久* 参数需要和选项相连，例如 **-d1** or **--differences=1**。

[**-e**, **--errexit**](#e)

在 *命令* 出错时停止更新，并在按任意键后退出。**watch** 的退出状态码是 *命令* 的退出状态码。如果信号 **n** 是 *命令* 终止的原因，则退出状态码是 128 + **n**。

[**-f**, **--follow**](#f)

**watch** 不会在每次更新时清除屏幕，而是会像 *tail -f* 那样滚动显示输出内容。此选项与任何追踪屏幕输出的选项（如 **--differences**、**--chgexit** 和 **--eqexit**）均不兼容。

[**-g**, **--chgexit**](#g)

在 *命令* 的可见的输出发生变化时退出。因为屏幕大小或者输出太大，无法在屏幕上显示的变化，不会导致 **watch** 退出。

[**-n**, **--interval** *秒*](#n)

指定更新间隔。小于 0.1 和大于 2678400（31 天）的时间间隔将被转换成相应的下限和上限。任何区域设置下都可以用 '.' 或 ',' 作为小数点。可使用 **WATCH\_INTERVAL** 环境变量持久性地设置一个非默认的时间间隔（遵循相同的规则和格式）。

[**-p**, **--precise**](#p)

在 *命令* 上一次执行开始之后 **--interval** 秒执行命令，而不是上一次执行结束之后 **--interval** 秒。如果完成 *命令* 需要的时间超过了 **--interval** 秒，那么不论哪种情况，都会等待命令完成。

[**-q**, **--equexit** &lt;周期数&gt;](#q)

如果 *命令* 的输出在给定的周期数内没有变化，则退出。

[**-r**, **--no-rerun**](#r)

不要在终端大小变化时重新运行程序，程序的输出将在下一次正常运行时重新出现。

[**-s**, **--shotsdir**](#s)

保存屏幕截图的目录。

[**-t**, **--no-title**](#t)

关闭通常在屏幕顶部显示的标题行。

[**-w**, **--no-wrap**](#w)

关闭自动换行。长行将被截断而不是换行到下一行。

[**-x**, **--exec**](#x)

将 *命令* 传给 [**exec**(3)](/man/os/procps/exec.3) 而不是 **sh -c**。程序的启动会稍微加快一点。Shell 功能（环境变量设置、变量和路径展开等）将不可用。

[**-h**, **--help**](#h)

显示帮助文本并退出。

[**-v**, **--version**](#v)

显示版本信息并退出。

# 按键控制

**空格**

立即执行 *命令*。如果它当前正在执行，则它不会被打断，但它的下一次执行将在本次执行结束后立即开始。

[**q**](#q~2)

退出 **watch**。目前，这个操作不会打断正在执行的 *命令*（和终止信号不同，例如在按下 Ctrl+C 后发出的 SIGKILL）。

[**s**](#s~2)

保存屏幕截图。它会被保存在当前工作目录，除非通过 **--shotsdir** 另外指定。如果 *命令* 当前正在执行，则屏幕截图将在它完成之后立即保存。

# 退出状态

**0**

成功。不代表 *命令* 的退出码。

**1**

和 *命令* 的操作无关的错误。

**2**

和 *命令* 的执行和管理有关的错误（不是它的退出码）。

**任何非零值 (--errexit)**

使用 **--errexit** 时，将返回 *命令* 的最后一个退出码。

# 环境

**watch** 的行为受以下环境变量的影响。

[**WATCH\_INTERVAL**](#WATCH_INTERVAL)

更新间隔，遵循与 **--interval** 命令行选项相同的规则。

[**COLUMNS**](#COLUMNS)

终端屏幕宽度（字符数）。设置此变量来覆盖自动检测的结果。

[**LINES**](#LINES)

终端屏幕高度（字符数）。设置此变量来覆盖自动检测的结果。

# 备注

本命令使用 POSIX 选项处理方式（即选项处理会在第一个非选项的参数处停止）。这意味着 *命令* 之后的标志不会由 **watch** 本身进行解释。

不可打印字符将从程序输出中去除。如果您想查看它们，请使用 **cat -v** 作为命令管道的一部分。

# 示例

要监控目录内容的更改，您可以使用

watch -d ls -l

如果您有支持动态调频的 CPU，并且想观察频率的变化，请试试以下命令。该命令会被传给 shell，所以您可以使用管道。双引号也是 shell 的功能之一。

watch -n1 'grep "^cpu MHz" /proc/cpuinfo | sort -nrk4'

要监控服务器的运行状态，您可以使用此方法将每次运行的输出的副本保存到文件中。**-p** 使命令每 10 秒执行一次，而不管上次运行花了多长时间。

watch -n10 -p -d '{ date; for i in 10.0.0.31 10.0.0.32 10.0.0.33; do R=OK; ping -c2 -W2 "$i" &&gt;/dev/null || R=FAIL; echo "$i: $R"; done } | tee -a ~/log'

要观察管理员有没有安装最新内核，您可以使用

watch uname -r

# 错误

当终端大小发生变化时，在下一次 *命令* 运行时，终端的内容变化将不作数。即使 *命令* 的输出同时发生变化，本次执行也不会触发 **--chgexit**，并且 **--equexit** 的计数器也不会重置。**--differences** 的高亮显示将被重置。

# 报告错误

请将错误报告发送到 [procps@freelists.org](mailto:procps@freelists.org)。

2025-04-16 procps-ng

---

Document: watch(1) from procps 4.0.7-r3 (Chainguard OS)
Source: https://downloads.sourceforge.net/project/procps-ng/Production/procps-ng-4.0.7.tar.xz
