WATCH(1)

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

概述
watch [选项 ...] 命令

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

选项

-b, --beep
    如果 命令 以非零返回值退出，则发出哔声。

-c, --color
    解释 ANSI 颜色和风格序列。

-C, --no-color
    不要解释 ANSI 颜色和风格序列。

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

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

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

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

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

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

-q, --equexit <周期数>
    如果 命令 的输出在给定的周期数内没有变化，则退出。

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

-s, --shotsdir
    保存屏幕截图的目录。

-t, --no-title
    关闭通常在屏幕顶部显示的标题行。

-w, --no-wrap
    关闭自动换行。长行将被截断而不是换行到下一行。

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

-h, --help
    显示帮助文本并退出。

-v, --version
    显示版本信息并退出。

按键控制

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

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

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

退出状态

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

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

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

任何非零值 (--errexit)
    使用 --errexit 时，将返回 命令 的最后一个退出码。

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

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

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

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" &>/dev/null || R=FAIL; echo "$i: $R"; done } | tee -a ~/log'

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

    watch uname -r

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

报告错误
请将错误报告发送到 procps@freelists.org。